Создать схему GeoJSON GraphQL из сторонней библиотеки - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь использовать библиотеку 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: Field \" geom \ "не должен иметь выборпоскольку тип \ "GeoJSONPoint \" не имеет подполей. "

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

{
  stations {
    id
    name
    geom {
      coordinates
    }
  }
}

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

1 Ответ

0 голосов
/ 12 октября 2018

Библиотека graphql-tools Аполлона включает в себя функцию 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 , являются своего рода вовлеченными;они определенно не являются одним скалярным типом, и я не хотел бы пытаться перепечатать их в своем определении схемы, если этого можно избежать.)

...