Переход с graphql-js на собственные схемы graphql?

В настоящее время пытаясь переключиться с graphql-js на буквальные типы / схемы GraphQL, я хотел бы знать, есть ли у кого-нибудь опыт работы с этим.

Возьмем действительно простой:

const Person = new GraphQLObjectType({
name: 'Person',
  fields: () => ({
    name: {
      type: GraphQLString,
      description: 'Person name',
    },
  }),
});

Я хотел бы переключиться на собственный синтаксис схемы GraphQL, т.е.

type Person {
  # Person name 
  name: String
}

Однако это должно быть инкрементным, и, учитывая использование graphql-js, лучшим решением на данный момент было бы синтаксический анализ литералов шаблона GraphQL на GraphQLObjectType (или любой другой тип, если на то пошло). У кого-нибудь есть опыт в этом, я, к сожалению, не могу найти для него какую-либо библиотеку.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
import { printType } from 'graphql';

printType(Person)

выход:

type Person {
  """Person name"""
  name: String
}

Вот демонстрация:

import { expect } from 'chai';
import { printType, printSchema, buildSchema, GraphQLSchema } from 'graphql';

import { logger } from '../util';
import { Person } from './';

describe('test suites', () => {
  it('convert constructor types to string types', () => {
    const stringTypeDefs = printType(Person).replace(/\s/g, '');
    logger.info(printType(Person));

    const expectValue = `
      type Person {
        """Person name"""
        name: String
      }
    `.replace(/\s/g, '');
    expect(stringTypeDefs).to.be.equal(expectValue);
  });

  it('buildSchema', () => {
    const stringTypeDefs = printType(Person);
    const schema = buildSchema(stringTypeDefs);

    expect(schema).to.be.an.instanceof(GraphQLSchema);
  });

  it('printSchema', () => {
    const stringTypeDefs = printType(Person);

    const schema = printSchema(buildSchema(stringTypeDefs));

    logger.info(schema);

    const expectValue = `
      type Person {
        """Person name"""
        name: String
      }
    `.replace(/\s/g, '');

    expect(schema.replace(/\s/g, '')).to.be.eql(expectValue);
  });
});

исходный код:

https://github.com/mrdulin/nodejs-graphql/blob/master/src/convert-constructor-types-to-string-types/index.spec.ts

К сожалению, это не работает, в нашем случае мы хотим, чтобы все было наоборот. Но спасибо, я пропустил утилиты 'graphql-js', похоже, есть 'buildSchema', которая здесь отлично обозначена :)

Alexandre Gomes 15.08.2018 08:17

@AlexandreGomes Извините. Правильно ли я понял ваш вопрос? Я так понял, что вы хотите конвертировать constructor object type definition в string type definition?

slideshowp2 15.08.2018 09:19

Это то, что я действительно хочу сделать в проекте, переместив кодовую базу типов GraphQL schema language.. Но для этого необходим способ конвертировать GraphQL Schema language в Schema object. Не могли бы вы изменить свой ответ так, чтобы он указывал на утилиту buildSchema, чтобы я мог принять ее как ответ?

Alexandre Gomes 15.08.2018 09:47

Хороший ! Спасибо :)

Alexandre Gomes 15.08.2018 10:42

Вы можете использовать graphql-cli для извлечения собственной схемы graphql с сервера graphql. Все, что вам нужно сделать, это ..

  1. Скачать инструмент | npm i -g graphql-cli
  2. Запустите graphql init в каталоге вашего проекта, чтобы создать файл .graphqlconfig
  3. Запустите свой сервер graphql
  4. Запустите graphql get-schema, и это сгенерирует вашу схему в собственном graphql.

ОБРАЗЕЦ .graphqlconfig

{
  "projects": {
    "my_sample_project": {
      "schemaPath": "schema.graphql",
      "extensions": {
        "endpoints": {
          "local": "http://localhost:8080/graphql"
        }
      }
    }
  }
}

Мы используем автоматическое создание схемы graphql / запросы / мутации для наших рабочих процессов CI.

Другие вопросы по теме