Skip to content

Commit afaed47

Browse files
committed
refactor: move resolvers options typedefs to theirs files
related #263
1 parent 5aacbb3 commit afaed47

27 files changed

+267
-295
lines changed

src/composeWithMongoose.ts

Lines changed: 13 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,11 @@
22

33
import type { ObjectTypeComposer, InputTypeComposer, SchemaComposer } from 'graphql-compose';
44
import { schemaComposer as globalSchemaComposer } from 'graphql-compose';
5-
import type { Model } from 'mongoose';
5+
import type { Model, Document } from 'mongoose';
66
import { convertModelToGraphQL } from './fieldsConverter';
77
import * as resolvers from './resolvers';
8-
import type {
9-
FilterHelperArgsOpts,
10-
LimitHelperArgsOpts,
11-
SortHelperArgsOpts,
12-
RecordHelperArgsOpts,
13-
} from './resolvers/helpers';
148
import MongoID from './types/MongoID';
15-
import type { PaginationResolverOpts } from './resolvers/pagination';
16-
import type { ConnectionOpts } from './resolvers/connection';
9+
import { GraphQLResolveInfo } from 'graphql';
1710

1811
export type ComposeWithMongooseOpts<TContext> = {
1912
schemaComposer?: SchemaComposer<TContext>;
@@ -25,9 +18,17 @@ export type ComposeWithMongooseOpts<TContext> = {
2518
remove?: string[];
2619
};
2720
inputType?: TypeConverterInputTypeOpts;
28-
resolvers?: false | TypeConverterResolversOpts;
21+
resolvers?: false | resolvers.AllResolversOpts;
22+
/** You may customize document id */
23+
transformRecordId?: TransformRecordIdFn<TContext>;
2924
};
3025

26+
export type TransformRecordIdFn<TContext = any> = (
27+
source: Document,
28+
context: TContext,
29+
info: GraphQLResolveInfo
30+
) => any;
31+
3132
export type TypeConverterInputTypeOpts = {
3233
name?: string;
3334
description?: string;
@@ -38,108 +39,6 @@ export type TypeConverterInputTypeOpts = {
3839
};
3940
};
4041

41-
export type TypeConverterResolversOpts = {
42-
findById?: false;
43-
findByIds?:
44-
| false
45-
| {
46-
limit?: LimitHelperArgsOpts | false;
47-
sort?: SortHelperArgsOpts | false;
48-
};
49-
findOne?:
50-
| false
51-
| {
52-
filter?: FilterHelperArgsOpts | false;
53-
sort?: SortHelperArgsOpts | false;
54-
skip?: false;
55-
};
56-
findMany?:
57-
| false
58-
| {
59-
filter?: FilterHelperArgsOpts | false;
60-
sort?: SortHelperArgsOpts | false;
61-
limit?: LimitHelperArgsOpts | false;
62-
skip?: false;
63-
};
64-
findByIdLean?: false;
65-
findByIdsLean?:
66-
| false
67-
| {
68-
limit?: LimitHelperArgsOpts | false;
69-
sort?: SortHelperArgsOpts | false;
70-
};
71-
findOneLean?:
72-
| false
73-
| {
74-
filter?: FilterHelperArgsOpts | false;
75-
sort?: SortHelperArgsOpts | false;
76-
skip?: false;
77-
};
78-
findManyLean?:
79-
| false
80-
| {
81-
filter?: FilterHelperArgsOpts | false;
82-
sort?: SortHelperArgsOpts | false;
83-
limit?: LimitHelperArgsOpts | false;
84-
skip?: false;
85-
};
86-
dataLoader?: false;
87-
dataLoaderLean?: false;
88-
dataLoaderMany?: false;
89-
dataLoaderManyLean?: false;
90-
updateById?:
91-
| false
92-
| {
93-
record?: RecordHelperArgsOpts | false;
94-
};
95-
updateOne?:
96-
| false
97-
| {
98-
record?: RecordHelperArgsOpts | false;
99-
filter?: FilterHelperArgsOpts | false;
100-
sort?: SortHelperArgsOpts | false;
101-
skip?: false;
102-
};
103-
updateMany?:
104-
| false
105-
| {
106-
record?: RecordHelperArgsOpts | false;
107-
filter?: FilterHelperArgsOpts | false;
108-
sort?: SortHelperArgsOpts | false;
109-
limit?: LimitHelperArgsOpts | false;
110-
skip?: false;
111-
};
112-
removeById?: false;
113-
removeOne?:
114-
| false
115-
| {
116-
filter?: FilterHelperArgsOpts | false;
117-
sort?: SortHelperArgsOpts | false;
118-
};
119-
removeMany?:
120-
| false
121-
| {
122-
filter?: FilterHelperArgsOpts | false;
123-
};
124-
createOne?:
125-
| false
126-
| {
127-
record?: RecordHelperArgsOpts | false;
128-
};
129-
createMany?:
130-
| false
131-
| {
132-
records?: RecordHelperArgsOpts | false;
133-
};
134-
count?:
135-
| false
136-
| {
137-
filter?: FilterHelperArgsOpts | false;
138-
};
139-
connection?: ConnectionOpts<any> | false;
140-
pagination?: PaginationResolverOpts | false;
141-
};
142-
14342
export function composeWithMongoose<TSource = any, TContext = any>(
14443
model: Model<any>,
14544
opts: ComposeWithMongooseOpts<TContext> = {}
@@ -248,10 +147,9 @@ export function createInputType(
248147
export function createResolvers(
249148
model: Model<any>,
250149
tc: ObjectTypeComposer<any, any>,
251-
opts: TypeConverterResolversOpts
150+
opts: resolvers.AllResolversOpts
252151
): void {
253-
const names = resolvers.getAvailableNames();
254-
names.forEach((resolverName) => {
152+
resolvers.availableResolverNames.forEach((resolverName) => {
255153
if (!{}.hasOwnProperty.call(opts, resolverName) || opts[resolverName] !== false) {
256154
const createResolverFn = resolvers[resolverName] as any;
257155
if (typeof createResolverFn === 'function') {

src/discriminators/prepareBaseResolvers.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Resolver } from 'graphql-compose';
2-
import { EMCResolvers } from '../resolvers';
2+
import { availableResolverNames } from '../resolvers';
33
import { DiscriminatorTypeComposer } from './DiscriminatorTypeComposer';
44

55
// change type on DKey generated by composeWithMongoose
@@ -28,30 +28,30 @@ function setDKeyEnumOnITCArgs(resolver: Resolver, baseTC: DiscriminatorTypeCompo
2828
// Also sets up DKey enum as type for DKey field on composers with filter and/or record args
2929
// composeWithMongoose composers
3030
export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>): void {
31-
for (const resolverName in EMCResolvers) {
32-
if (EMCResolvers.hasOwnProperty(resolverName) && baseTC.hasResolver(resolverName)) {
31+
availableResolverNames.forEach((resolverName) => {
32+
if (baseTC.hasResolver(resolverName)) {
3333
const resolver = baseTC.getResolver(resolverName);
3434

3535
switch (resolverName) {
36-
case EMCResolvers.findMany:
37-
case EMCResolvers.findByIds:
36+
case 'findMany':
37+
case 'findByIds':
3838
resolver.setType(baseTC.getDInterface().List);
3939
// @ts-expect-error
4040
resolver.projection[baseTC.getDKey()] = 1;
4141
break;
4242

43-
case EMCResolvers.findById:
44-
case EMCResolvers.findOne:
43+
case 'findById':
44+
case 'findOne':
4545
resolver.setType(baseTC.getDInterface());
4646
// @ts-expect-error
4747
resolver.projection[baseTC.getDKey()] = 1;
4848
break;
4949

50-
case EMCResolvers.createOne:
51-
case EMCResolvers.updateOne:
52-
case EMCResolvers.updateById:
53-
case EMCResolvers.removeOne:
54-
case EMCResolvers.removeById:
50+
case 'createOne':
51+
case 'updateOne':
52+
case 'updateById':
53+
case 'removeOne':
54+
case 'removeById':
5555
resolver.getOTC().extendField('record', {
5656
type: baseTC.getDInterface(),
5757
projection: {
@@ -60,7 +60,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
6060
});
6161
break;
6262

63-
case EMCResolvers.createMany:
63+
case 'createMany':
6464
resolver.getOTC().extendField('records', {
6565
type: baseTC.getDInterface().List.NonNull,
6666
projection: {
@@ -69,7 +69,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
6969
});
7070
break;
7171

72-
case EMCResolvers.pagination:
72+
case 'pagination':
7373
resolver.getOTC().extendField('items', {
7474
type: baseTC.getDInterface().List,
7575
projection: {
@@ -78,7 +78,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
7878
});
7979
break;
8080

81-
case EMCResolvers.connection:
81+
case 'connection':
8282
const edgesTC = resolver
8383
.getOTC()
8484
.getFieldOTC('edges')
@@ -101,12 +101,12 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
101101

102102
// set DKey as required field to create from base
103103
// must be done after setting DKeyEnum
104-
if (resolverName === EMCResolvers.createOne || resolverName === EMCResolvers.createMany) {
105-
const fieldName = resolverName === EMCResolvers.createMany ? 'records' : 'record';
104+
if (resolverName === 'createOne' || resolverName === 'createMany') {
105+
const fieldName = resolverName === 'createMany' ? 'records' : 'record';
106106
resolver.getArgITC(fieldName).extendField(baseTC.getDKey(), {
107107
type: baseTC.getDKeyETC().NonNull,
108108
});
109109
}
110110
}
111-
}
111+
});
112112
}

src/discriminators/prepareChildResolvers.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
ComposeWithMongooseDiscriminatorsOpts,
44
DiscriminatorTypeComposer,
55
} from './DiscriminatorTypeComposer';
6-
import { EMCResolvers } from '../resolvers';
6+
import { availableResolverNames } from '../resolvers';
77

88
// set the DKey as a query on filter, also project it
99
// Also look at it like setting for filters, makes sure to limit
@@ -136,43 +136,43 @@ export function prepareChildResolvers<TSource, TContext>(
136136
childTC: ObjectTypeComposer<TSource, TContext>,
137137
opts: ComposeWithMongooseDiscriminatorsOpts<TContext>
138138
): void {
139-
for (const resolverName in EMCResolvers) {
140-
if (EMCResolvers.hasOwnProperty(resolverName) && childTC.hasResolver(resolverName)) {
139+
availableResolverNames.forEach((resolverName) => {
140+
if (childTC.hasResolver(resolverName)) {
141141
const resolver = childTC.getResolver(resolverName);
142142

143143
switch (resolverName) {
144-
case EMCResolvers.createOne:
144+
case 'createOne':
145145
setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'record');
146146

147147
hideDKey(resolver, childTC, baseDTC.getDKey(), 'record');
148148
break;
149149

150-
case EMCResolvers.createMany:
150+
case 'createMany':
151151
setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'records');
152152

153153
hideDKey(resolver, childTC, baseDTC.getDKey(), 'records');
154154
break;
155155

156-
case EMCResolvers.updateById:
156+
case 'updateById':
157157
hideDKey(resolver, childTC, baseDTC.getDKey(), 'record');
158158
break;
159159

160-
case EMCResolvers.updateOne:
161-
case EMCResolvers.updateMany:
160+
case 'updateOne':
161+
case 'updateMany':
162162
setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'filter');
163163

164164
hideDKey(resolver, childTC, baseDTC.getDKey(), ['record', 'filter']);
165165
break;
166166

167-
case EMCResolvers.findOne:
168-
case EMCResolvers.findMany:
169-
case EMCResolvers.findOneLean:
170-
case EMCResolvers.findManyLean:
171-
case EMCResolvers.removeOne:
172-
case EMCResolvers.removeMany:
173-
case EMCResolvers.count:
174-
case EMCResolvers.pagination:
175-
case EMCResolvers.connection:
167+
case 'findOne':
168+
case 'findMany':
169+
case 'findOneLean':
170+
case 'findManyLean':
171+
case 'removeOne':
172+
case 'removeMany':
173+
case 'count':
174+
case 'pagination':
175+
case 'connection':
176176
// limit remove scope to DKey
177177
setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'filter');
178178

@@ -189,5 +189,5 @@ export function prepareChildResolvers<TSource, TContext>(
189189
'records',
190190
]);
191191
}
192-
}
192+
});
193193
}

src/discriminators/utils/__tests__/mergeTypeConverterResolverOpts-test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import type { TypeConverterResolversOpts } from '../../../composeWithMongoose';
21
import {
32
mergeTypeConverterResolverOpts,
43
mergePrimitiveTypeFields,
54
mergeMapTypeFields,
65
mergeFilterOperatorsOptsMap,
76
} from '../mergeTypeConverterResolversOpts';
7+
import { AllResolversOpts } from 'src/resolvers';
88

9-
const baseConverterResolverOpts: TypeConverterResolversOpts = {
9+
const baseConverterResolverOpts: AllResolversOpts = {
1010
findMany: {
1111
limit: { defaultValue: 20 },
1212
// sort: false,
@@ -33,7 +33,7 @@ const baseConverterResolverOpts: TypeConverterResolversOpts = {
3333
},
3434
};
3535

36-
const childConverterResolverOpts: TypeConverterResolversOpts = {
36+
const childConverterResolverOpts: AllResolversOpts = {
3737
findMany: {
3838
limit: { defaultValue: 50 },
3939
sort: false,
@@ -59,7 +59,7 @@ const childConverterResolverOpts: TypeConverterResolversOpts = {
5959
},
6060
};
6161

62-
const expectedConverterResolverOpts: TypeConverterResolversOpts = {
62+
const expectedConverterResolverOpts: AllResolversOpts = {
6363
findMany: {
6464
limit: { defaultValue: 50 },
6565
sort: false,

src/discriminators/utils/mergeTypeConverterResolversOpts.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
2-
import type { TypeConverterResolversOpts } from '../../composeWithMongoose';
32
import { MergeAbleHelperArgsOpts } from '../../resolvers/helpers';
43
import { mergeStringAndStringArraysFields } from './mergeCustomizationOptions';
4+
import { AllResolversOpts } from 'src/resolvers';
55

66
type TypeFieldMap = {
77
[fieldName: string]: any;
@@ -126,9 +126,9 @@ export function mergeMapTypeFields(
126126
}
127127

128128
export function mergeTypeConverterResolverOpts(
129-
baseTypeConverterResolverOpts?: TypeConverterResolversOpts | false,
130-
childTypeConverterResolverOpts?: TypeConverterResolversOpts | false
131-
): TypeConverterResolversOpts | false | void {
129+
baseTypeConverterResolverOpts?: AllResolversOpts | false,
130+
childTypeConverterResolverOpts?: AllResolversOpts | false
131+
): AllResolversOpts | false | void {
132132
if (!baseTypeConverterResolverOpts) {
133133
return childTypeConverterResolverOpts;
134134
}

0 commit comments

Comments
 (0)