public override void OnBeforeCreate(
            IDescriptorContext context,
            ISchemaBuilder schemaBuilder)
        {
            var allSchemas = new OrderedDictionary <NameString, DocumentNode>();

            foreach (KeyValuePair <NameString, IRequestExecutor> executor in
                     context.GetRemoteExecutors())
            {
                allSchemas.Add(
                    executor.Key,
                    Utf8GraphQLParser.Parse(executor.Value.Schema.Print()));
            }

            IReadOnlyList <DocumentNode> typeExtensions = context.GetTypeExtensions();

            // merge schemas
            DocumentNode mergedSchema = MergeSchemas(context, allSchemas);

            mergedSchema = AddExtensions(mergedSchema, typeExtensions);
            mergedSchema = RewriteMerged(context, mergedSchema);
            mergedSchema = mergedSchema.RemoveBuiltInTypes();

            VisitMerged(context, mergedSchema);
            MarkExternalFields(schemaBuilder, mergedSchema);
            BuildNameLookup(context, schemaBuilder, mergedSchema, allSchemas.Keys);

            schemaBuilder
            .AddDocument(mergedSchema)
            .AddDirectiveType <DelegateDirectiveType>()
            .AddDirectiveType <ComputedDirectiveType>()
            .AddDirectiveType <SourceDirectiveType>()
            .SetTypeResolver(IsOfTypeFallback);
        }
        public RemoteSchemaDefinition Build(
            IDescriptorContext context,
            ISchema schema)
        {
            var extensionDocuments = new List <DocumentNode>(context.GetTypeExtensions(_key));

            if (_schemaDirectives.Count > 0)
            {
                var schemaExtension = new SchemaExtensionNode(
                    null,
                    _schemaDirectives,
                    Array.Empty <OperationTypeDefinitionNode>());

                extensionDocuments.Add(new DocumentNode(new[] { schemaExtension }));
            }

            return(new RemoteSchemaDefinition(
                       _name.HasValue ? _name : schema.Name,
                       schema.ToDocument(),
                       extensionDocuments));
        }