Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New type system #1063

Merged
merged 26 commits into from
Feb 15, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Introspection and all core tests
pekkah committed Feb 13, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit 66a9115d4fb4f62198802e77c866e97d5215c707
6 changes: 3 additions & 3 deletions src/graphql.language/Nodes/TypeSystem/TypeSystemDocument.cs
Original file line number Diff line number Diff line change
@@ -10,9 +10,9 @@ public TypeSystemDocument(
IReadOnlyList<SchemaDefinition>? schemaDefinitions,
IReadOnlyList<TypeDefinition>? typeDefinitions,
IReadOnlyList<DirectiveDefinition>? directiveDefinitions,
IReadOnlyList<SchemaExtension>? schemaExtensions,
IReadOnlyList<TypeExtension>? typeExtensions,
IReadOnlyList<Import>? imports = null)
IReadOnlyList<SchemaExtension>? schemaExtensions = default,
IReadOnlyList<TypeExtension>? typeExtensions = default,
IReadOnlyList<Import>? imports = default)
{
SchemaDefinitions = schemaDefinitions;
TypeDefinitions = typeDefinitions;
5 changes: 3 additions & 2 deletions src/graphql.language/Parser.cs
Original file line number Diff line number Diff line change
@@ -637,6 +637,7 @@ public NamedType ParseTypeCondition()
return ParseName();
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Name ParseName()
{
var location = Ensure(TokenKind.Name);
@@ -647,7 +648,7 @@ public Name ParseName()
return new Name(value, location);
}

//[MethodImpl(MethodImplOptions.AggressiveInlining)]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private Location Ensure(TokenKind kind)
{
SkipComment();
@@ -660,7 +661,7 @@ private Location Ensure(TokenKind kind)
return GetLocation();
}

//[MethodImpl(MethodImplOptions.AggressiveInlining)]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private Location GetLocation()
{
return new Location(_lexer.Line, _lexer.Column);
6 changes: 3 additions & 3 deletions src/graphql/Execution/Values.cs
Original file line number Diff line number Diff line change
@@ -111,13 +111,13 @@ public static class Values
private static object CoerceNonNullTypeValue(
ISchema schema,
object? value,
NonNullType NonNullType)
NonNullType nonNullType)
{
var coercedValue = CoerceValue(schema, value, NonNullType.OfType);
var coercedValue = CoerceValue(schema, value, nonNullType.OfType);
if (coercedValue == null)
throw new ValueCoercionException("Coerced value is null",
value,
NonNullType);
nonNullType);

return coercedValue;
}
24 changes: 22 additions & 2 deletions src/graphql/FieldResolversMap.cs
Original file line number Diff line number Diff line change
@@ -28,11 +28,31 @@ IEnumerator<Subscriber> IEnumerable<Subscriber>.GetEnumerator()
return _subscribers.Values.GetEnumerator();
}

public IEnumerable<string> GetFields()
{
foreach (var (field, _) in _resolvers)
{
yield return field;
}

foreach (var (field, _) in _subscribers)
{ if (_resolvers.ContainsKey(field))
continue;

yield return field;
}
}

public void Add(string key, Resolver resolver)
{
_resolvers.Add(key, resolver);
}

public void Add(string key, Subscriber subscriber)
{
_subscribers.Add(key, subscriber);
}

public void Add(string key, Subscriber subscriber, Resolver resolver)
{
if (key == null) throw new ArgumentNullException(nameof(key));
@@ -43,15 +63,15 @@ public void Add(string key, Subscriber subscriber, Resolver resolver)
_resolvers.Add(key, resolver);
}

public Resolver GetResolver(string key)
public Resolver? GetResolver(string key)
{
if (!_resolvers.ContainsKey(key))
return null;

return _resolvers[key];
}

public Subscriber GetSubscriber(string key)
public Subscriber? GetSubscriber(string key)
{
if (!_subscribers.ContainsKey(key))
return null;
24 changes: 13 additions & 11 deletions src/graphql/IResolverMap.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
using Tanka.GraphQL.Language.Nodes.TypeSystem;
using System.Collections.Generic;
using Tanka.GraphQL.Language.Nodes.TypeSystem;
using Tanka.GraphQL.ValueResolution;

namespace Tanka.GraphQL
namespace Tanka.GraphQL;

public interface IResolverMap
{
public interface IResolverMap
{
Resolver? GetResolver(string typeName, string fieldName);
}
Resolver? GetResolver(string typeName, string fieldName);

public static class ResolverMapExtensions
IEnumerable<(string TypeName, IEnumerable<string> Fields)> GetTypes();
}

public static class ResolverMapExtensions
{
public static Resolver? GetResolver(this IResolverMap map, ObjectDefinition type, FieldDefinition field)
{
public static Resolver? GetResolver(this IResolverMap map, ObjectDefinition type, FieldDefinition field)
{
return map.GetResolver(type.Name, field.Name);
}
return map.GetResolver(type.Name, field.Name);
}
}
5 changes: 4 additions & 1 deletion src/graphql/ISubscriberMap.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using Tanka.GraphQL.Language.Nodes.TypeSystem;
using System.Collections.Generic;
using Tanka.GraphQL.Language.Nodes.TypeSystem;
using Tanka.GraphQL.ValueResolution;

namespace Tanka.GraphQL
{
public interface ISubscriberMap
{
Subscriber? GetSubscriber(string typeName, string fieldName);

IEnumerable<(string TypeName, IEnumerable<string> Fields)> GetTypes();
}

public static class SubscriberMapExtensions
20 changes: 7 additions & 13 deletions src/graphql/Introspection/Introspect.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using Tanka.GraphQL.Language.Nodes.TypeSystem;
using Tanka.GraphQL.TypeSystem;

namespace Tanka.GraphQL.Introspection
@@ -95,20 +97,12 @@ fragment TypeRef on __Type {
}
}";

/// <summary>
/// Return introspection schema for given schema
/// </summary>
/// <param name="schema"></param>
/// <returns></returns>
public static Task<ISchema> Schema(ISchema schema)
public static (TypeSystemDocument TypeSystemDocument, ResolversMap Resolvers) Create()
{
var builder = IntrospectionSchema.Create();
var introspectionResolvers = new IntrospectionResolvers(schema);
var typeSystem = IntrospectionSchema.GetTypeSystem();
var introspectionResolvers = new IntrospectionResolvers();

return builder.Build(new SchemaBuildOptions()
{
Resolvers = introspectionResolvers
});
return (typeSystem, introspectionResolvers);
}
}
}
Loading