从graphql-js切换到本机graphql模式?

时间:2018-08-13 09:52:41

标签: 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(或其他任何类型)。有没有人有这样做的经验,不幸的是我似乎找不到任何库。

2 个答案:

答案 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);
  });
});

源代码:

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

答案 1 :(得分:1)

您可以使用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"
        }
      }
    }
  }
}

我们为CI工作流程利用了自动生成的graphql模式/ queries/mutations