Skip to content

Commit 93b58bd

Browse files
committed
refactor: revert errorCatcher logic. Let's keep it one for all mutations.
I'll just extend ValidationError by one more field in next commit. And code will be simplified quite well.
1 parent e7ccde9 commit 93b58bd

File tree

9 files changed

+32
-71
lines changed

9 files changed

+32
-71
lines changed

src/resolvers/createMany.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { ObjectTypeComposer, Resolver } from 'graphql-compose';
22
import type { Model, Document } from 'mongoose';
33
import { recordHelperArgs } from './helpers';
44
import type { GenResolverOpts } from './index';
5-
import { addManyErrorCatcherField } from './helpers/addErrorCatcherField';
5+
import { addErrorCatcherField } from './helpers/errorCatcher';
66
import { validateManyAndThrow } from './helpers/validate';
77

88
export default function createMany<TSource = Document, TContext = any>(
@@ -107,7 +107,7 @@ export default function createMany<TSource = Document, TContext = any>(
107107

108108
// Add `error` field to payload which can catch resolver Error
109109
// and return it in mutation payload
110-
addManyErrorCatcherField(resolver);
110+
addErrorCatcherField(resolver);
111111

112112
return resolver;
113113
}

src/resolvers/createOne.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Resolver, ObjectTypeComposer } from 'graphql-compose';
22
import type { Model, Document } from 'mongoose';
33
import { recordHelperArgs } from './helpers';
44
import type { ExtendedResolveParams, GenResolverOpts } from './index';
5-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
5+
import { addErrorCatcherField } from './helpers/errorCatcher';
66
import { validateAndThrow } from './helpers/validate';
77

88
export default function createOne<TSource = Document, TContext = any>(
Lines changed: 23 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
1-
import { Resolver, ResolverResolveParams } from 'graphql-compose';
2-
import {
3-
getErrorInterface,
4-
getManyErrorInterface,
5-
MongoError,
6-
ValidationError,
7-
ManyValidationError,
8-
} from '../../errors';
1+
import { Resolver } from 'graphql-compose';
2+
import { getErrorInterface, MongoError, ValidationError } from '../../errors';
93
import { GraphQLError } from 'graphql-compose/lib/graphql';
104

11-
export function makeHandleResolverError(childResolve: any): any {
12-
return async function handleResolverError(
13-
rp: ResolverResolveParams<any, any, any>
14-
): Promise<any> {
5+
/**
6+
* This helper add `error` field in payload & wraps `resolve` method.
7+
* It catches exception and return it in payload if user
8+
* requested `err` field in GraphQL-query.
9+
*/
10+
export function addErrorCatcherField(resolver: Resolver<any, any, any>): void {
11+
getErrorInterface(resolver.schemaComposer);
12+
13+
const payloadTC = resolver.getOTC();
14+
15+
if (!payloadTC.hasField('error')) {
16+
payloadTC.setField('error', {
17+
type: 'ErrorInterface',
18+
description:
19+
'Error that may occur during operation. If you request this field in GraphQL query, you will receive typed error in payload; otherwise error will be provided in root `errors` field of GraphQL response.',
20+
});
21+
}
22+
23+
const childResolve = resolver.resolve.bind(resolver);
24+
resolver.setResolve(async (rp) => {
1525
try {
1626
const res = await childResolve(rp);
1727
return res;
@@ -23,12 +33,6 @@ export function makeHandleResolverError(childResolve: any): any {
2333
message: e.message,
2434
errors: e.errors,
2535
};
26-
} else if (e instanceof ManyValidationError) {
27-
error = {
28-
name: 'ManyValidationError',
29-
message: e.message,
30-
errors: e.errors,
31-
};
3236
} else if (e instanceof MongoError) {
3337
error = {
3438
name: 'MongoError',
@@ -61,48 +65,5 @@ export function makeHandleResolverError(childResolve: any): any {
6165
);
6266
}
6367
}
64-
};
65-
}
66-
/**
67-
* This helper add `error` field in payload & wraps `resolve` method.
68-
* It catches exception and return it in payload if user
69-
* requested `err` field in GraphQL-query.
70-
*/
71-
export function addErrorCatcherField(resolver: Resolver<any, any, any>): void {
72-
getErrorInterface(resolver.schemaComposer);
73-
74-
const payloadTC = resolver.getOTC();
75-
76-
if (!payloadTC.hasField('error')) {
77-
payloadTC.setField('error', {
78-
type: 'ErrorInterface',
79-
description:
80-
'Error that may occur during operation. If you request this field in GraphQL query, you will receive typed error in payload; otherwise error will be provided in root `errors` field of GraphQL response.',
81-
});
82-
}
83-
84-
const childResolve = resolver.resolve.bind(resolver);
85-
resolver.setResolve(makeHandleResolverError(childResolve));
86-
}
87-
88-
/**
89-
* This helper add `error` field in payload & wraps `resolve` method.
90-
* It catches exception and return it in payload if user
91-
* requested `err` field in GraphQL-query.
92-
*/
93-
export function addManyErrorCatcherField(resolver: Resolver<any, any, any>): void {
94-
getManyErrorInterface(resolver.schemaComposer);
95-
96-
const payloadTC = resolver.getOTC();
97-
98-
if (!payloadTC.hasField('error')) {
99-
payloadTC.setField('error', {
100-
type: 'ManyErrorInterface',
101-
description:
102-
'Error that may occur during operation. If you request this field in GraphQL query, you will receive typed error in payload; otherwise error will be provided in root `errors` field of GraphQL response.',
103-
});
104-
}
105-
106-
const childResolve = resolver.resolve.bind(resolver);
107-
resolver.setResolve(makeHandleResolverError(childResolve));
68+
});
10869
}

src/resolvers/removeById.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { Resolver, ObjectTypeComposer } from 'graphql-compose';
22
import type { Model, Document } from 'mongoose';
33
import findById from './findById';
44
import type { ExtendedResolveParams } from './index';
5-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
5+
import { addErrorCatcherField } from './helpers/errorCatcher';
66

77
export default function removeById<TSource = Document, TContext = any>(
88
model: Model<any>,

src/resolvers/removeMany.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Model, Document } from 'mongoose';
33
import { filterHelperArgs, filterHelper, prepareAliases } from './helpers';
44
import type { ExtendedResolveParams, GenResolverOpts } from './index';
55
import { beforeQueryHelper } from './helpers/beforeQueryHelper';
6-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
6+
import { addErrorCatcherField } from './helpers/errorCatcher';
77

88
export default function removeMany<TSource = Document, TContext = any>(
99
model: Model<any>,

src/resolvers/removeOne.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Model, Document } from 'mongoose';
33
import { filterHelperArgs, sortHelperArgs } from './helpers';
44
import findOne from './findOne';
55
import type { ExtendedResolveParams, GenResolverOpts } from './index';
6-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
6+
import { addErrorCatcherField } from './helpers/errorCatcher';
77

88
export default function removeOne<TSource = Document, TContext = any>(
99
model: Model<any>,

src/resolvers/updateById.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Resolver, ObjectTypeComposer } from 'graphql-compose';
22
import type { Model, Document } from 'mongoose';
33
import { recordHelperArgs } from './helpers/record';
44
import findById from './findById';
5-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
5+
import { addErrorCatcherField } from './helpers/errorCatcher';
66
import type { ExtendedResolveParams, GenResolverOpts } from './index';
77
import { validateAndThrow } from './helpers/validate';
88

src/resolvers/updateMany.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
import { toMongoDottedObject } from '../utils/toMongoDottedObject';
1717
import type { ExtendedResolveParams, GenResolverOpts } from './index';
1818
import { beforeQueryHelper } from './helpers/beforeQueryHelper';
19-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
19+
import { addErrorCatcherField } from './helpers/errorCatcher';
2020

2121
export default function updateMany<TSource = Document, TContext = any>(
2222
model: Model<any>,

src/resolvers/updateOne.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Model, Document } from 'mongoose';
33
import type { ExtendedResolveParams, GenResolverOpts } from './index';
44
import { skipHelperArgs, recordHelperArgs, filterHelperArgs, sortHelperArgs } from './helpers';
55
import findOne from './findOne';
6-
import { addErrorCatcherField } from './helpers/addErrorCatcherField';
6+
import { addErrorCatcherField } from './helpers/errorCatcher';
77
import { validateAndThrow } from './helpers/validate';
88

99
export default function updateOne<TSource = Document, TContext = any>(

0 commit comments

Comments
 (0)