Создать схему GeoJSON GraphQL из сторонней библиотеки

Я пытаюсь использовать библиотеку graphql-geojson в приложении Apollo / Express для обслуживания GeoJSON ответы.

Библиотека предоставляет преобразователи, но я не нашел способа добавить типы в определение схемы, не записывая их вручную. И даже тогда это оказалось не так просто.

Другой настраиваемый тип, Date from graphql-date, я могу просто объявить в схеме как собственный скаляр:

const typeDefs: DocumentNode = gql`
  scalar Date
  scalar PointObject

  type Station {
    id: ID!
    name: String!
    geom: PointObject
    created: Date!
  }
  ...
}

Однако объявление PointObject как скаляр позволяет получить полный GeoJSON (что нормально), но приводит к ошибкам:

«GraphQLError: Поле \" geom \ "не должно иметь выделения, поскольку тип \" GeoJSONPoint \ "не имеет подполей».

когда вы пытаетесь вернуть подвыбор geom, например:

{
  stations {
    id
    name
    geom {
      coordinates
    }
  }
}

Есть ли способ объединить типы, предоставленные библиотекой, с моей схемой?


person Greg Brown    schedule 11.10.2018    source источник


Ответы (1)


Библиотека graphql-tools Apollo включает функцию mergeSchemas, которая может комбинировать несколько схем и фрагментов схемы вместе. Вы должны иметь возможность использовать это для построения одной большой схемы из определений вашего типа (непроверенных):

import * as GeoJSON from 'graphql-geojson';
import { mergeSchemas } from 'graphql-tools';

const typeDefs = `
  type Station {
    id: ID!
    name: String!
    geom: PointObject
    created: Date!
  }
`;

const schema = mergeSchemas({
  schemas: [Object.values(GeoJSON), typeDefs]
});

(Обратите внимание, что определяет типы graphql-geojson, отчасти вовлечены; они определенно не являются одним скалярным типом, и я бы не хотел пытаться перепечатать их в своем определении схемы, если бы этого можно было избежать.)

person David Maze    schedule 11.10.2018