NestJS + GraphQL Federation и схема сначала GraphQLDefinitionsFactory

Я пытаюсь использовать федерацию GraphQL с подходом, основанным на схеме. Перед тем, как переключиться на федерацию, я использовал ts-node и небольшой скрипт для генерации моей типизации, подобной этой:

import { GraphQLDefinitionsFactory } from '@nestjs/graphql';
import { join } from 'path';


const definitionsFactory = new GraphQLDefinitionsFactory();
definitionsFactory.generate({
  typePaths: ['./src/**/*.graphql'],
  path: join(process.cwd(), 'src/graphql.schema.ts'),
  outputAs: 'class',
});

Это работало хорошо, пока я не переключился на подход федерации и не изменил свою схему, добавив директиву @Key () в мой файл sites.graphql (сначала схема!):

type Site @key(fields: "siteId")  {
  siteId: ID!
  contractId: Int
  dateStart: String
  siteName: String
}

type Query {
    GetSite(id: ID!): Site
}

Теперь, когда я генерирую свои классы, у меня возникает следующая ошибка:

> ts-node src/tools/generate-typings.ts
(node:84388) UnhandledPromiseRejectionWarning: Error: Unknown directive "@key".

Директива @key не распознается. Я что-то упускаю?

Спасибо за помощь


person Fred Mériot    schedule 21.09.2020    source источник


Ответы (1)


Хорошо, копаясь в исходном коде graphql-definitions.factory.ts, я обнаружил недокументированный вариант federation.

Изменение моего сценария на:

import { GraphQLDefinitionsFactory } from '@nestjs/graphql';
import { join } from 'path';


const definitionsFactory = new GraphQLDefinitionsFactory();
definitionsFactory.generate({
  typePaths: ['./src/**/*.graphql'],
  path: join(process.cwd(), 'src/graphql.schema.ts'),
  outputAs: 'class',
  federation: true
});

И теперь это работает.

Ps: чтобы запустить проект, не забудьте в конце концов отключить installSubscriptionHandlers в параметрах GraphQLModule.

person Fred Mériot    schedule 21.09.2020