Exemplo n.º 1
0
        public void Merge(
            ISchemaMergeContext context,
            IReadOnlyList <ITypeInfo> types)
        {
            if (types.OfType <UnionTypeInfo>().Any())
            {
                var  notMerged    = types.OfType <UnionTypeInfo>().ToList();
                bool hasLeftovers = types.Count > notMerged.Count;

                for (int i = 0; i < notMerged.Count; i++)
                {
                    context.AddType(notMerged[i].Definition.Rename(
                                        TypeMergeHelpers.CreateName(context, notMerged[i]),
                                        notMerged[i].Schema.Name));
                }

                if (hasLeftovers)
                {
                    _next.Invoke(context, types.NotOfType <UnionTypeInfo>());
                }
            }
            else
            {
                _next.Invoke(context, types);
            }
        }
Exemplo n.º 2
0
            public void Merge(
                ISchemaMergeContext context,
                IReadOnlyList <ITypeInfo> types)
            {
                var typeInfos = types.OfType <ObjectTypeInfo>().ToArray();
                var fields    = typeInfos[0].Definition.Fields.ToList();

                fields.AddRange(typeInfos[1].Definition.Fields);
                context.AddType(
                    typeInfos[0].Definition.WithFields(fields));
            }
Exemplo n.º 3
0
 public void Merge(
     ISchemaMergeContext context,
     IReadOnlyList <HotChocolate.Stitching.Merge.ITypeInfo> types)
 {
     if (types.OfType <ITypeInfo <ScalarTypeDefinitionNode> >().Any())
     {
         ITypeInfo <ScalarTypeDefinitionNode> scalar =
             types.OfType <ITypeInfo <ScalarTypeDefinitionNode> >().FirstOrDefault();
         context.AddType(scalar.Definition);
         return;
     }
     _next(context, types);
 }
        protected override void MergeTypes(
            ISchemaMergeContext context,
            IReadOnlyList <InputObjectTypeInfo> types,
            NameString newTypeName)
        {
            List <InputObjectTypeDefinitionNode> definitions = types
                                                               .Select(t => t.Definition)
                                                               .ToList();

            InputObjectTypeDefinitionNode definition =
                definitions[0].Rename(
                    newTypeName,
                    types.Select(t => t.Schema.Name));

            context.AddType(definition);
        }
Exemplo n.º 5
0
        private static void MergeType(
            ISchemaMergeContext context,
            IReadOnlyList <EnumTypeInfo> types)
        {
            var definition = types[0].Definition;

            EnumTypeDefinitionNode descriptionDef =
                types.Select(t => t.Definition)
                .FirstOrDefault(t => t.Description != null);

            if (descriptionDef != null)
            {
                definition = definition.WithDescription(
                    descriptionDef.Description);
            }

            context.AddType(definition.Rename(
                                TypeMergeHelpers.CreateName(context, types),
                                types.Select(t => t.Schema.Name)));
        }
        protected override void MergeTypes(
            ISchemaMergeContext context,
            IReadOnlyList <ObjectTypeInfo> types,
            NameString newTypeName)
        {
            List <ObjectTypeDefinitionNode> definitions = types
                                                          .Select(t => t.Definition)
                                                          .ToList();

            // ? : how do we handle the interfaces correctly
            var interfaces = new HashSet <string>(
                definitions.SelectMany(d =>
                                       d.Interfaces.Select(t => t.Name.Value)));

            ObjectTypeDefinitionNode definition = definitions[0]
                                                  .WithInterfaces(interfaces.Select(t =>
                                                                                    new NamedTypeNode(new NameNode(t))).ToList())
                                                  .Rename(newTypeName, types.Select(t => t.Schema.Name));

            context.AddType(definition);
        }
Exemplo n.º 7
0
        public void Merge(
            ISchemaMergeContext context,
            IReadOnlyList <ITypeInfo> types)
        {
            if (types.Count > 0)
            {
                if (types[0].IsRootType)
                {
                    var names  = new HashSet <string>();
                    var fields = new List <FieldDefinitionNode>();

                    foreach (ObjectTypeInfo type in
                             types.OfType <ObjectTypeInfo>())
                    {
                        IntegrateFields(type.Definition, type, names, fields);
                    }

                    if (types[0].Schema.TryGetOperationType(
                            (ObjectTypeDefinitionNode)types[0].Definition,
                            out OperationType operationType))
                    {
                        var mergedRootType = new ObjectTypeDefinitionNode
                                             (
                            null,
                            new NameNode(operationType.ToString()),
                            null,
                            Array.Empty <DirectiveNode>(),
                            Array.Empty <NamedTypeNode>(),
                            fields
                                             );
                        context.AddType(mergedRootType);
                    }
                }
                else
                {
                    _next.Invoke(context, types);
                }
            }
        }