Skip to content

Commit ad6ed68

Browse files
committed
feat: improve return types for findByIds & findMany now they returns empty array instead of null
BREAKING CHANGE: some internal `filter` type names for args were changed. It may break some clients if you use that type names in your graphql queries: - `count` resolver change name for filter type `Filter*Input` -> `FilterCount*Input`
1 parent 93b58bd commit ad6ed68

File tree

10 files changed

+18
-19
lines changed

10 files changed

+18
-19
lines changed

src/__tests__/github_issues/136-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ describe('issue #136 - Mongoose virtuals', () => {
3737
const recordsTC = CommentTC.getResolver('createMany').getArgITC('records');
3838
const clonedRecordTC = recordsTC.clone('createManyFilteredInput');
3939
clonedRecordTC.removeField('links').addFields({ hi: 'String' });
40-
updateManyFiltered.extendArg('records', { type: clonedRecordTC.getTypePlural() });
40+
updateManyFiltered.extendArg('records', { type: clonedRecordTC.List });
4141

4242
return updateManyFiltered
4343
.wrapResolve((next) => async (rp) => {

src/discriminators/prepareBaseResolvers.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
3535
switch (resolverName) {
3636
case EMCResolvers.findMany:
3737
case EMCResolvers.findByIds:
38-
resolver.setType(baseTC.getDInterface().getTypePlural());
38+
resolver.setType(baseTC.getDInterface().List);
3939
// @ts-expect-error
4040
resolver.projection[baseTC.getDKey()] = 1;
4141
break;
@@ -62,7 +62,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
6262

6363
case EMCResolvers.createMany:
6464
resolver.getOTC().extendField('records', {
65-
type: baseTC.getDInterface().getTypePlural().getTypeNonNull(),
65+
type: baseTC.getDInterface().List.NonNull,
6666
projection: {
6767
[baseTC.getDKey()]: 1,
6868
},
@@ -71,7 +71,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
7171

7272
case EMCResolvers.pagination:
7373
resolver.getOTC().extendField('items', {
74-
type: baseTC.getDInterface().getTypePlural(),
74+
type: baseTC.getDInterface().List,
7575
projection: {
7676
[baseTC.getDKey()]: 1,
7777
},
@@ -85,15 +85,13 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
8585
.clone(`${baseTC.getTypeName()}Edge`);
8686

8787
edgesTC.extendField('node', {
88-
type: baseTC.getDInterface().getTypeNonNull(),
88+
type: baseTC.getDInterface().NonNull,
8989
projection: {
9090
[baseTC.getDKey()]: 1,
9191
},
9292
});
9393

94-
resolver
95-
.getOTC()
96-
.setField('edges', edgesTC.getTypeNonNull().getTypePlural().getTypeNonNull());
94+
resolver.getOTC().setField('edges', edgesTC.NonNull.List.NonNull);
9795
break;
9896

9997
default:
@@ -106,7 +104,7 @@ export function prepareBaseResolvers(baseTC: DiscriminatorTypeComposer<any, any>
106104
if (resolverName === EMCResolvers.createOne || resolverName === EMCResolvers.createMany) {
107105
const fieldName = resolverName === EMCResolvers.createMany ? 'records' : 'record';
108106
resolver.getArgITC(fieldName).extendField(baseTC.getDKey(), {
109-
type: baseTC.getDKeyETC().getTypeNonNull(),
107+
type: baseTC.getDKeyETC().NonNull,
110108
});
111109
}
112110
}

src/resolvers/__tests__/count-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('count() ->', () => {
6161
const resolver = count(UserModel, UserTC);
6262
expect(resolver.getArgITC('filter').getFieldITC('contacts').toSDL({ omitDescriptions: true }))
6363
.toMatchInlineSnapshot(`
64-
"input FilterUserContactsInput {
64+
"input FilterCountUserContactsInput {
6565
phones: [String]
6666
email: String
6767
skype: String

src/resolvers/count.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export default function count<TSource = Document, TContext = any>(
2525
kind: 'query',
2626
args: {
2727
...filterHelperArgs(tc, model, {
28-
prefix: 'Filter', // TODO: rename to FilterCount in 9.0.0
28+
prefix: 'FilterCount',
2929
suffix: 'Input',
3030
...opts?.filter,
3131
}),

src/resolvers/createMany.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export default function createMany<TSource = Document, TContext = any>(
3737
recordIds: {
3838
type: '[MongoID!]!',
3939
description: 'Created document IDs',
40+
resolve: (s: any) => s.recordIds || [],
4041
},
4142
records: {
4243
type: tc.NonNull.List,

src/resolvers/findByIds.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default function findByIds<TSource = Document, TContext = any>(
2929
const aliases = prepareAliases(model);
3030

3131
return tc.schemaComposer.createResolver({
32-
type: tc.getTypeNonNull().getTypePlural(),
32+
type: tc.NonNull.List.NonNull,
3333
name: 'findByIds',
3434
kind: 'query',
3535
args: {
@@ -58,7 +58,7 @@ export default function findByIds<TSource = Document, TContext = any>(
5858
projectionHelper(resolveParams, aliases);
5959
limitHelper(resolveParams);
6060
sortHelper(resolveParams);
61-
return beforeQueryHelper(resolveParams);
61+
return beforeQueryHelper(resolveParams) || [];
6262
}) as any,
6363
}) as any;
6464
}

src/resolvers/findMany.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default function findMany<TSource = Document, TContext = any>(
3131
const aliases = prepareAliases(model);
3232

3333
return tc.schemaComposer.createResolver({
34-
type: tc.getTypeNonNull().getTypePlural(),
34+
type: tc.NonNull.List.NonNull,
3535
name: 'findMany',
3636
kind: 'query',
3737
args: {
@@ -57,7 +57,7 @@ export default function findMany<TSource = Document, TContext = any>(
5757
limitHelper(resolveParams);
5858
sortHelper(resolveParams);
5959
projectionHelper(resolveParams, aliases);
60-
return beforeQueryHelper(resolveParams);
60+
return beforeQueryHelper(resolveParams) || [];
6161
}) as any,
6262
});
6363
}

src/resolvers/helpers/filter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export const filterHelperArgs = (
9191

9292
return {
9393
filter: {
94-
type: opts.isRequired ? itc.getTypeNonNull() : itc,
94+
type: opts.isRequired ? itc.NonNull : itc,
9595
description: opts.onlyIndexed ? 'Filter only by indexed fields' : 'Filter by fields',
9696
},
9797
};

src/resolvers/helpers/filterOperators.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ export function addFilterOperators(
5151
}
5252

5353
itc.addFields({
54-
OR: [itc.getTypeNonNull()],
55-
AND: [itc.getTypeNonNull()],
54+
OR: itc.NonNull.List,
55+
AND: itc.NonNull.List,
5656
});
5757
}
5858

src/resolvers/helpers/record.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export const recordHelperArgs = (
5959

6060
return {
6161
record: {
62-
type: opts.isRequired ? recordITC.getTypeNonNull() : recordITC,
62+
type: opts.isRequired ? recordITC.NonNull : recordITC,
6363
},
6464
};
6565
};

0 commit comments

Comments
 (0)