Генерация TypeScript-интерфейсов из схемы от Apollo генерирует и настраивает, но слишком долго (время) - около 30 000 строк занимают около 1 часа - PullRequest
0 голосов
/ 12 марта 2020

Я хочу использовать GraphQLDefinitionsFactory from '@nestjs/graphql' для генерации интерфейсов TypeScript для меня на основе запросов с моего сервера Prisma и схемы graphql по индивидуальным запросам типа, мутации, ввода типа ...

Проблема : Схема около 6.000 - 7.000 строк занимает около 5 минут, что не проблема. Но со схемой около 30 000 строк это занимает более 1 часа, что слишком долго.

Я попробовал этот код:

import { GqlModuleOptions, GqlOptionsFactory } from '@nestjs/graphql';
import { Request } from 'express';
import { Injectable } from '@nestjs/common';
import { join } from 'path';

@Injectable()
export class GraphqlOptions implements GqlOptionsFactory {

  createGqlOptions(): Promise<GqlModuleOptions> | GqlModuleOptions {
    return {
      context: ({ req, res }) => ({ req, res }),
      typePaths: ['./src/*/*.graphql', './generated/*.graphql'], // path for gql schema files
      installSubscriptionHandlers: true,
      resolverValidationOptions: {
        requireResolversForResolveType: false,
      },
      definitions: {
        // will generate .ts types from gql schema files
        path: join(process.cwd(), 'src/graphql.schema.generated.ts'),
        outputAs: 'class',
      },
      debug: true,
      introspection: true,
      playground: true,
    };
  }
}

Затем я запускаю сервер из терминала:

[Nest] 8048   - 03/12/2020, 12:25:04 PM   [InstanceLoader] AppModule dependencies initialized +723ms
[Nest] 8048   - 03/12/2020, 12:25:04 PM   [InstanceLoader] PrismaModule dependencies initialized +2ms
[Nest] 8048   - 03/12/2020, 12:25:04 PM   [InstanceLoader] UserModule dependencies initialized +4ms
[Nest] 8048   - 03/12/2020, 12:25:04 PM   [InstanceLoader] GraphQLModule dependencies initialized +1ms 

Второй способ:

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

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

* команда запуска: * ts-node src/generate-typings.ts по путеводителю из гнезда js: https://docs.nestjs.com/graphql/quick-start#schema -первое

Я не знаю, почему generate занимает столько времени. Если ты знаешь, можешь мне это объяснить? Есть ли способ улучшить производительность generate или может я ошибаюсь и мне нужно что-то исправить? Если вы хотите больше информации, пожалуйста, прокомментируйте ниже, я предоставлю. Большое вам спасибо.

...