graphql: используйте GraphQLObjectType для создания типа, расширяющего мутацию - PullRequest
0 голосов
/ 08 октября 2018

Я использую пакет graphql npm для создания схемы graphql, которая включает в себя мутацию, которая выглядит следующим образом:

type Mutation {
  cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost]
}

, что я делаю так, предполагая, что у меня есть входные и выходные переменные, содержащиеGraphQLObjectTypes:

new GraphQLObjectType({
      name:  'Mutation',
      fields: {
        [camelcase(output.toString())+'s_onSave']: {
          args: {data: {type: new GraphQLList(input)},
        },
          type:  new GraphQLList(output)
        }
      }
    })

Но я хочу расширить мутацию типов, чтобы получить что-то вроде этого:

extend type Mutation {
  cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost]
}

Мне нужно расширить мутацию, потому что яобъединение большого количества построенных схем, и если я не сделаю, только одна мутация выживет после слияния.Я бы предпочел не использовать манипуляции со строками, как в ответе ниже, и я бы предпочел не выполнять слияние вручную.Я не хочу заглядывать внутрь схемы.

Что касается жизни, я не могу понять, как.

Ответы [ 2 ]

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

Мне грустно, я не получил ответ на свой вопрос.То, что я закончил, было на предпоследнем шаге моего конвейера, перед тем, как записать схему в файл, я заменил строки.

replace('type Mutation', 'extend type Mutation'),
replace('type Query', 'extend type Query'), 

Я думаю, так иногда и происходит.Я все еще удивлен, что это не выполнимо программно.

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

Я полагаю, что вы можете сделать что-то вроде этого:

const { parse, GraphQLSchema } = require('graphql')
const { extendSchema } = require('graphql/utilities)

const schema = new GraphQLSchema({
  query: queryType,
});

const extension = `extend type Foo {
  someNewField: String
}`;

const extendedSchema = extendSchema(schema, parse(extension));

Но ... для мутации или чего-либо, требующего специального распознавателя, вам все равно придется добавить преобразователь обратно с чем-то вроде addResolveFunctionsToSchema из graphql-tools.

Вы можете легко расширять типы, если пишете свою схему с использованием SDL, пишете свои резольверы отдельно, а затем создаете схему с помощью makeExecutableSchema вместо программного определения схемы.

Если вы предоставите больше контекста относительно того, почему вы расширяете схему или чего вы пытаетесь достичь, я мог бы предложить лучший подход.

...