当前正在尝试从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
(或其他任何类型)。有没有人有这样做的经验,不幸的是我似乎找不到任何库。
答案 0 :(得分:1)
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);
});
});
源代码:
答案 1 :(得分:1)
您可以使用graphql-cli从graphql服务器中提取本地graphql模式。您所需要做的就是..
npm i -g graphql-cli
graphql init
以
创建 .graphqlconfig 文件graphql get-schema
,这将在本机graphql中生成您的架构示例 .graphqlconfig
{
"projects": {
"my_sample_project": {
"schemaPath": "schema.graphql",
"extensions": {
"endpoints": {
"local": "http://localhost:8080/graphql"
}
}
}
}
}
我们为CI工作流程利用了自动生成的graphql模式/ queries/mutations。