/// <summary> /// When overridden in a child class,populates this introspected type using its parent schema to fill in any details about /// other references in this instance. /// </summary> /// <param name="schema">The schema.</param> public override void Initialize(IntrospectedSchema schema) { if (_rawDefaultValue == null) { return; } if (_rawDefaultValue is bool boolValue) { // microsoft returns "True" and "False" for boolean conversions to string // #sad face this.DefaultValue = boolValue.ToString().ToLowerInvariant(); } else if (_rawDefaultValue is string stringValue) { // graphql requires and defaultValue parameters be encoded as a string // see spec: https://graphql.github.io/graphql-spec/June2018/#sec-The-__InputValue-Type // any strings must be escaped to be treated as a string // e.g. convert "myString" => "\"myString\"" var delimiter = stringValue.Contains("\n") ? ParserConstants.BLOCK_STRING_DELIMITER : ParserConstants.NORMAL_STRING_DELIMITER; this.DefaultValue = $"{delimiter}{stringValue}{delimiter}"; } else if (this.IntrospectedGraphType.Kind == TypeKind.ENUM) { this.DefaultValue = schema.Schema.Configuration.DeclarationOptions.GraphNamingFormatter.FormatEnumValueName(_rawDefaultValue?.ToString()); } else { this.DefaultValue = _rawDefaultValue.ToString(); } }
/// <summary> /// Loads the possible types field for for unions or interfaces. /// </summary> /// <param name="schema">The schema.</param> private void LoadPossibleTypes(IntrospectedSchema schema) { var possibleTypes = new List<IntrospectedType>(); if (this.GraphType is IUnionGraphType unionType) { // find all the graph types in the schema that implement this interface foreach (var typeName in unionType.PossibleGraphTypeNames) { var foundType = schema.FindIntrospectedType(typeName); if (foundType != null) possibleTypes.Add(foundType); } this.PossibleTypes = possibleTypes; } else if (this.GraphType is IInterfaceGraphType interfaceType) { var graphTypes = schema.FindIntrospectedTypesByInterface(interfaceType.Name); foreach (var possibleType in graphTypes) { possibleTypes.Add(possibleType); } this.PossibleTypes = possibleTypes; } }
/// <summary> /// When overridden in a child class,populates this introspected type using its parent schema to fill in any details about /// other references in this instance. /// </summary> /// <param name="schema">The schema.</param> public void Initialize(IntrospectedSchema schema) { this.LoadFields(schema); this.LoadInterfaces(schema); this.LoadEnumValues(); this.LoadInputValues(schema); this.LoadPossibleTypes(schema); }
/// <summary> /// When overridden in a child class,populates this introspected type using its parent schema to fill in any details about /// other references in this instance. /// </summary> /// <param name="schema">The schema.</param> public override void Initialize(IntrospectedSchema schema) { var list = new List <IntrospectedInputValueType>(); foreach (var arg in _field.Arguments.Where(x => !x.ArgumentModifiers.HasFlag(GraphArgumentModifiers.Internal))) { var introspectedType = schema.FindIntrospectedType(arg.TypeExpression.TypeName); introspectedType = Introspection.WrapBaseTypeWithModifiers(introspectedType, arg.TypeExpression); var inputValue = new IntrospectedInputValueType(arg, introspectedType); inputValue.Initialize(schema); list.Add(inputValue); } this.Arguments = list; }
/// <summary> /// When overridden in a child class,populates this introspected type using its parent schema to fill in any details about /// other references in this instance. /// </summary> /// <param name="schema">The schema.</param> public override void Initialize(IntrospectedSchema schema) { var list = new List <IntrospectedInputValueType>(); foreach (var arg in this.GraphType.Arguments) { var introspectedType = schema.FindIntrospectedType(arg.TypeExpression.TypeName); introspectedType = Introspection.WrapBaseTypeWithModifiers(introspectedType, arg.TypeExpression); var inputValue = new IntrospectedInputValueType(arg, introspectedType); list.Add(inputValue); } this.Arguments = list; this.Locations = this.GraphType.Locations.GetIndividualFlags <DirectiveLocation>().ToList(); this.Publish = this.GraphType.Publish; }
/// <summary> /// Loads the fields into this instance for any <see cref="IGraphType"/> that supports them. /// </summary> /// <param name="schema">The schema.</param> private void LoadFields(IntrospectedSchema schema) { if (!(this.GraphType is IGraphFieldContainer fieldContainer)) return; var fields = new List<IntrospectedField>(); foreach (var field in fieldContainer.Fields.Where(x => x.Publish)) { IntrospectedType introspectedType = schema.FindIntrospectedType(field.TypeExpression.TypeName); introspectedType = Introspection.WrapBaseTypeWithModifiers(introspectedType, field.TypeExpression); var introField = new IntrospectedField(field, introspectedType); fields.Add(introField); introField.Initialize(schema); } this.Fields = fields; }
private void LoadInputValues(IntrospectedSchema schema) { if (!(this.GraphType is IInputObjectGraphType inputType)) return; // populate inputFields collection // populate the fields for this object type var inputFields = new List<IntrospectedInputValueType>(); foreach (var field in inputType.Fields) { var introspectedType = schema.FindIntrospectedType(field.TypeExpression.TypeName); introspectedType = Introspection.WrapBaseTypeWithModifiers(introspectedType, field.TypeExpression); var inputField = new IntrospectedInputValueType(field, introspectedType); inputField.Initialize(schema); inputFields.Add(inputField); } this.InputFields = inputFields; }
/// <summary> /// Loads the interfaces for any graph type that supports them. /// </summary> /// <param name="schema">The schema.</param> private void LoadInterfaces(IntrospectedSchema schema) { if (this.GraphType is IGraphInterfaceContainer interfaceContainer) { // populate the interfaces for this object type, if any are defined and exist var interfaceList = new List<IntrospectedType>(); foreach (var ifaceName in interfaceContainer.InterfaceNames) { // if the schema doesn't know of the interface, skip it. var introspectedType = schema.FindIntrospectedType(ifaceName); if (introspectedType == null) continue; interfaceList.Add(introspectedType); } this.Interfaces = interfaceList; } }