• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

doug-martin / nestjs-query / 6447619094

08 Oct 2023 12:30PM CUT coverage: 96.667%. Remained the same
6447619094

push

github

renovate[bot]
chore(deps): update dependency @types/supertest to v2.0.14

1796 of 1940 branches covered (0.0%)

Branch coverage included in aggregate %.

4962 of 5051 relevant lines covered (98.24%)

806.77 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.91
/packages/query-graphql/src/module.ts
1
import { Assembler, NestjsQueryCoreModule, Class } from '@nestjs-query/core';
340✔
2
import { DynamicModule, ForwardReference, Provider } from '@nestjs/common';
3
import { AutoResolverOpts, createAuthorizerProviders, createHookProviders, createResolvers } from './providers';
340✔
4
import { ReadResolverOpts } from './resolvers';
5
import { defaultPubSub, pubSubToken, GraphQLPubSub } from './subscription';
340✔
6
import { PagingStrategies } from './types/query/paging';
7

8
interface DTOModuleOpts<DTO> {
9
  DTOClass: Class<DTO>;
10
  CreateDTOClass?: Class<DTO>;
11
  UpdateDTOClass?: Class<DTO>;
12
}
13

14
export interface NestjsQueryGraphqlModuleOpts {
15
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
  imports: Array<Class<any> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
17
  services?: Provider[];
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
  assemblers?: Class<Assembler<any, any, any, any, any, any>>[];
20
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
  resolvers?: AutoResolverOpts<any, any, unknown, unknown, ReadResolverOpts<any>, PagingStrategies>[];
22
  dtos?: DTOModuleOpts<unknown>[];
23
  pubSub?: Provider<GraphQLPubSub>;
24
}
25

26
export class NestjsQueryGraphQLModule {
340✔
27
  static forFeature(opts: NestjsQueryGraphqlModuleOpts): DynamicModule {
28
    const coreModule = this.getCoreModule(opts);
428✔
29
    const providers = this.getProviders(opts);
428✔
30
    return {
428✔
31
      module: NestjsQueryGraphQLModule,
32
      imports: [...opts.imports, coreModule],
33
      providers: [...providers],
34
      exports: [...providers, ...opts.imports, coreModule],
35
    };
36
  }
37

38
  static defaultPubSubProvider(): Provider<GraphQLPubSub> {
39
    return { provide: pubSubToken(), useValue: defaultPubSub() };
428✔
40
  }
41

42
  private static getCoreModule(opts: NestjsQueryGraphqlModuleOpts): DynamicModule {
43
    return NestjsQueryCoreModule.forFeature({
428✔
44
      assemblers: opts.assemblers,
45
      imports: opts.imports,
46
    });
47
  }
48

49
  private static getProviders(opts: NestjsQueryGraphqlModuleOpts): Provider<unknown>[] {
50
    return [
428✔
51
      ...this.getServicesProviders(opts),
52
      ...this.getPubSubProviders(opts),
53
      ...this.getAuthorizerProviders(opts),
54
      ...this.getHookProviders(opts),
55
      ...this.getResolverProviders(opts),
56
    ];
57
  }
58

59
  private static getPubSubProviders(opts: NestjsQueryGraphqlModuleOpts): Provider<GraphQLPubSub>[] {
60
    return [opts.pubSub ?? this.defaultPubSubProvider()];
428!
61
  }
62

63
  private static getServicesProviders(opts: NestjsQueryGraphqlModuleOpts): Provider<unknown>[] {
64
    return opts.services ?? [];
428✔
65
  }
66

67
  private static getResolverProviders(opts: NestjsQueryGraphqlModuleOpts): Provider<unknown>[] {
68
    return createResolvers(opts.resolvers ?? []);
428!
69
  }
70

71
  private static getAuthorizerProviders(opts: NestjsQueryGraphqlModuleOpts): Provider<unknown>[] {
72
    const resolverDTOs = opts.resolvers?.map((r) => r.DTOClass) ?? [];
440!
73
    const dtos = opts.dtos?.map((o) => o.DTOClass) ?? [];
428!
74
    return createAuthorizerProviders([...resolverDTOs, ...dtos]);
428✔
75
  }
76

77
  private static getHookProviders(opts: NestjsQueryGraphqlModuleOpts): Provider<unknown>[] {
78
    return createHookProviders([...(opts.resolvers ?? []), ...(opts.dtos ?? [])]);
428!
79
  }
80
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc