В настоящее время пытаясь переключиться с 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 (или любой другой тип, если на то пошло). У кого-нибудь есть опыт в этом, я, к сожалению, не могу найти для него какую-либо библиотеку.


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);
});
});
исходный код:
@AlexandreGomes Извините. Правильно ли я понял ваш вопрос? Я так понял, что вы хотите конвертировать constructor object type definition в string type definition?
Это то, что я действительно хочу сделать в проекте, переместив кодовую базу типов GraphQL schema language.. Но для этого необходим способ конвертировать GraphQL Schema language в Schema object. Не могли бы вы изменить свой ответ так, чтобы он указывал на утилиту buildSchema, чтобы я мог принять ее как ответ?
Хороший ! Спасибо :)
Вы можете использовать graphql-cli для извлечения собственной схемы graphql с сервера graphql. Все, что вам нужно сделать, это ..
npm i -g graphql-cligraphql init в каталоге вашего проекта, чтобы
создать файл .graphqlconfiggraphql get-schema, и это сгенерирует вашу схему в собственном graphql.ОБРАЗЕЦ .graphqlconfig
{
"projects": {
"my_sample_project": {
"schemaPath": "schema.graphql",
"extensions": {
"endpoints": {
"local": "http://localhost:8080/graphql"
}
}
}
}
}
Мы используем автоматическое создание схемы graphql / запросы / мутации для наших рабочих процессов CI.
К сожалению, это не работает, в нашем случае мы хотим, чтобы все было наоборот. Но спасибо, я пропустил утилиты 'graphql-js', похоже, есть 'buildSchema', которая здесь отлично обозначена :)