Skip to content

Commit fde394b

Browse files
authored
feat: Allow to opt-out of mutation payload.error field (#314)
* Allow to opt-out of mutation payload.error Signed-off-by: Egi Ginting <[email protected]> * Add test case Signed-off-by: Egi Ginting <[email protected]>
1 parent d463913 commit fde394b

File tree

10 files changed

+225
-24
lines changed

10 files changed

+225
-24
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ interface CreateManyResolverOpts {
409409
records?: RecordHelperArgsOpts;
410410
/** Customize payload.recordIds field. If false, then this field will be removed. */
411411
recordIds?: PayloadRecordIdsHelperOpts | false;
412+
/** Customize payload.error field. If true, then this field will be removed. */
413+
disableErrorField?: boolean;
412414
}
413415
```
414416

@@ -422,6 +424,8 @@ interface CreateOneResolverOpts {
422424
record?: RecordHelperArgsOpts;
423425
/** Customize payload.recordId field. If false, then this field will be removed. */
424426
recordId?: PayloadRecordIdHelperOpts | false;
427+
/** Customize payload.error field. If true, then this field will be removed. */
428+
disableErrorField?: boolean;
425429
}
426430
```
427431

@@ -573,6 +577,8 @@ interface RemoveByIdResolverOpts {
573577
suffix?: string;
574578
/** Customize payload.recordId field. If false, then this field will be removed. */
575579
recordId?: PayloadRecordIdHelperOpts | false;
580+
/** Customize payload.error field. If true, then this field will be removed. */
581+
disableErrorField?: boolean;
576582
}
577583
```
578584

@@ -585,6 +591,8 @@ interface RemoveManyResolverOpts {
585591
/** Customize input-type for `filter` argument. If `false` then arg will be removed. */
586592
filter?: FilterHelperArgsOpts | false;
587593
limit?: LimitHelperArgsOpts | false;
594+
/** Customize payload.error field. If true, then this field will be removed. */
595+
disableErrorField?: boolean;
588596
}
589597
```
590598

@@ -599,6 +607,8 @@ interface RemoveOneResolverOpts {
599607
sort?: SortHelperArgsOpts | false;
600608
/** Customize payload.recordId field. If false, then this field will be removed. */
601609
recordId?: PayloadRecordIdHelperOpts | false;
610+
/** Customize payload.error field. If true, then this field will be removed. */
611+
disableErrorField?: boolean;
602612
}
603613
```
604614

@@ -612,6 +622,8 @@ interface UpdateByIdResolverOpts {
612622
record?: RecordHelperArgsOpts;
613623
/** Customize payload.recordId field. If false, then this field will be removed. */
614624
recordId?: PayloadRecordIdHelperOpts | false;
625+
/** Customize payload.error field. If true, then this field will be removed. */
626+
disableErrorField?: boolean;
615627
}
616628
```
617629

@@ -628,6 +640,8 @@ interface UpdateManyResolverOpts {
628640
sort?: SortHelperArgsOpts | false;
629641
limit?: LimitHelperArgsOpts | false;
630642
skip?: false;
643+
/** Customize payload.error field. If true, then this field will be removed. */
644+
disableErrorField?: boolean;
631645
}
632646
```
633647

@@ -645,6 +659,8 @@ interface UpdateOneResolverOpts {
645659
skip?: false;
646660
/** Customize payload.recordId field. If false, then this field will be removed. */
647661
recordId?: PayloadRecordIdHelperOpts | false;
662+
/** Customize payload.error field. If true, then this field will be removed. */
663+
disableErrorField?: boolean;
648664
}
649665
```
650666

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
import { SchemaComposer } from 'graphql-compose';
2+
import { composeMongoose } from '../../index';
3+
import { mongoose } from '../../__mocks__/mongooseCommon';
4+
import { Document } from 'mongoose';
5+
6+
const schemaComposer = new SchemaComposer<{ req: any }>();
7+
8+
const UserSchema = new mongoose.Schema({
9+
_id: { type: Number },
10+
name: { type: String, required: true },
11+
age: { type: Number },
12+
});
13+
interface IUser extends Document {
14+
_id: number;
15+
name: string;
16+
age?: number;
17+
}
18+
19+
const UserModel = mongoose.model<IUser>('User', UserSchema);
20+
const UserTC = composeMongoose(UserModel, { schemaComposer });
21+
22+
schemaComposer.Query.addFields({
23+
userById: UserTC.mongooseResolvers.findById(),
24+
userFindOne: UserTC.mongooseResolvers.findOne(),
25+
});
26+
27+
// const schema = schemaComposer.buildSchema();
28+
// console.log(schemaComposer.toSDL());
29+
30+
beforeAll(async () => {
31+
await UserModel.base.createConnection();
32+
await UserModel.create({ _id: 1, name: 'User1' });
33+
});
34+
afterAll(() => UserModel.base.disconnect());
35+
36+
describe('issue #286 - Allow to provide `disableErrorField` option for mutation resolvers configs', () => {
37+
it('Resolver:createMany', () => {
38+
const resolver = UserTC.mongooseResolvers.createMany({
39+
disableErrorField: true,
40+
});
41+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
42+
"type CreateManyUserPayload {
43+
\\"\\"\\"Documents IDs\\"\\"\\"
44+
recordIds: [Int!]!
45+
46+
\\"\\"\\"Created documents\\"\\"\\"
47+
records: [User!]
48+
49+
\\"\\"\\"Number of created documents\\"\\"\\"
50+
createdCount: Int!
51+
}"
52+
`);
53+
});
54+
55+
it('Resolver:createOne', () => {
56+
const resolver = UserTC.mongooseResolvers.createOne({
57+
disableErrorField: true,
58+
});
59+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
60+
"type CreateOneUserPayload {
61+
\\"\\"\\"Document ID\\"\\"\\"
62+
recordId: Int
63+
64+
\\"\\"\\"Created document\\"\\"\\"
65+
record: User
66+
}"
67+
`);
68+
});
69+
70+
it('Resolver:removeById', () => {
71+
const resolver = UserTC.mongooseResolvers.removeById({
72+
disableErrorField: true,
73+
});
74+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
75+
"type RemoveByIdUserPayload {
76+
\\"\\"\\"Document ID\\"\\"\\"
77+
recordId: Int
78+
79+
\\"\\"\\"Removed document\\"\\"\\"
80+
record: User
81+
}"
82+
`);
83+
});
84+
85+
it('Resolver:removeMany', () => {
86+
const resolver = UserTC.mongooseResolvers.removeMany({
87+
disableErrorField: true,
88+
});
89+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
90+
"type RemoveManyUserPayload {
91+
\\"\\"\\"Affected documents number\\"\\"\\"
92+
numAffected: Int
93+
}"
94+
`);
95+
});
96+
97+
it('Resolver:removeOne', () => {
98+
const resolver = UserTC.mongooseResolvers.removeOne({
99+
disableErrorField: true,
100+
});
101+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
102+
"type RemoveOneUserPayload {
103+
\\"\\"\\"Document ID\\"\\"\\"
104+
recordId: Int
105+
106+
\\"\\"\\"Removed document\\"\\"\\"
107+
record: User
108+
}"
109+
`);
110+
});
111+
112+
it('Resolver:updateById', () => {
113+
const resolver = UserTC.mongooseResolvers.updateById({
114+
disableErrorField: true,
115+
});
116+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
117+
"type UpdateByIdUserPayload {
118+
\\"\\"\\"Document ID\\"\\"\\"
119+
recordId: Int
120+
121+
\\"\\"\\"Updated document\\"\\"\\"
122+
record: User
123+
}"
124+
`);
125+
});
126+
127+
it('Resolver:updateMany', () => {
128+
const resolver = UserTC.mongooseResolvers.updateMany({
129+
disableErrorField: true,
130+
});
131+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
132+
"type UpdateManyUserPayload {
133+
\\"\\"\\"Affected documents number\\"\\"\\"
134+
numAffected: Int
135+
}"
136+
`);
137+
});
138+
139+
it('Resolver:updateOne', () => {
140+
const resolver = UserTC.mongooseResolvers.updateOne({
141+
disableErrorField: true,
142+
});
143+
expect(resolver.getTypeComposer().toSDL()).toMatchInlineSnapshot(`
144+
"type UpdateOneUserPayload {
145+
\\"\\"\\"Document ID\\"\\"\\"
146+
recordId: Int
147+
148+
\\"\\"\\"Updated document\\"\\"\\"
149+
record: User
150+
}"
151+
`);
152+
});
153+
});

src/resolvers/createMany.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ export interface CreateManyResolverOpts {
1212
records?: RecordHelperArgsOpts;
1313
/** Customize payload.recordIds field. If false, then this field will be removed. */
1414
recordIds?: PayloadRecordIdsHelperOpts | false;
15+
/** Customize payload.error field. If true, then this field will be removed. */
16+
disableErrorField?: boolean;
1517
}
1618

1719
type TArgs = {
@@ -114,9 +116,11 @@ export function createMany<TSource = any, TContext = any, TDoc extends Document
114116
},
115117
});
116118

117-
// Add `error` field to payload which can catch resolver Error
118-
// and return it in mutation payload
119-
addErrorCatcherField(resolver);
119+
if (!opts?.disableErrorField) {
120+
// Add `error` field to payload which can catch resolver Error
121+
// and return it in mutation payload
122+
addErrorCatcherField(resolver);
123+
}
120124

121125
return resolver;
122126
}

src/resolvers/createOne.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ export interface CreateOneResolverOpts {
1313
record?: RecordHelperArgsOpts;
1414
/** Customize payload.recordId field. If false, then this field will be removed. */
1515
recordId?: PayloadRecordIdHelperOpts | false;
16+
/** Customize payload.error field. If true, then this field will be removed. */
17+
disableErrorField?: boolean;
1618
}
1719

1820
type TArgs = {
@@ -95,9 +97,11 @@ export function createOne<TSource = any, TContext = any, TDoc extends Document =
9597
}) as any,
9698
});
9799

98-
// Add `error` field to payload which can catch resolver Error
99-
// and return it in mutation payload
100-
addErrorCatcherField(resolver);
100+
if (!opts?.disableErrorField) {
101+
// Add `error` field to payload which can catch resolver Error
102+
// and return it in mutation payload
103+
addErrorCatcherField(resolver);
104+
}
101105

102106
return resolver;
103107
}

src/resolvers/removeById.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export interface RemoveByIdResolverOpts {
1111
suffix?: string;
1212
/** Customize payload.recordId field. If false, then this field will be removed. */
1313
recordId?: PayloadRecordIdHelperOpts | false;
14+
/** Customize payload.error field. If true, then this field will be removed. */
15+
disableErrorField?: boolean;
1416
}
1517

1618
type TArgs = {
@@ -83,9 +85,11 @@ export function removeById<TSource = any, TContext = any, TDoc extends Document
8385
}) as any,
8486
});
8587

86-
// Add `error` field to payload which can catch resolver Error
87-
// and return it in mutation payload
88-
addErrorCatcherField(resolver);
88+
if (!opts?.disableErrorField) {
89+
// Add `error` field to payload which can catch resolver Error
90+
// and return it in mutation payload
91+
addErrorCatcherField(resolver);
92+
}
8993

9094
return resolver;
9195
}

src/resolvers/removeMany.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export interface RemoveManyResolverOpts {
1818
/** Customize input-type for `filter` argument. If `false` then arg will be removed. */
1919
filter?: FilterHelperArgsOpts | false;
2020
limit?: LimitHelperArgsOpts | false;
21+
/** Customize payload.error field. If true, then this field will be removed. */
22+
disableErrorField?: boolean;
2123
}
2224

2325
type TArgs = {
@@ -108,9 +110,11 @@ export function removeMany<TSource = any, TContext = any, TDoc extends Document
108110
}) as any,
109111
});
110112

111-
// Add `error` field to payload which can catch resolver Error
112-
// and return it in mutation payload
113-
addErrorCatcherField(resolver);
113+
if (!opts?.disableErrorField) {
114+
// Add `error` field to payload which can catch resolver Error
115+
// and return it in mutation payload
116+
addErrorCatcherField(resolver);
117+
}
114118

115119
return resolver;
116120
}

src/resolvers/removeOne.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export interface RemoveOneResolverOpts {
1919
sort?: SortHelperArgsOpts | false;
2020
/** Customize payload.recordId field. If false, then this field will be removed. */
2121
recordId?: PayloadRecordIdHelperOpts | false;
22+
/** Customize payload.error field. If true, then this field will be removed. */
23+
disableErrorField?: boolean;
2224
}
2325

2426
type TArgs = {
@@ -107,9 +109,11 @@ export function removeOne<TSource = any, TContext = any, TDoc extends Document =
107109
}) as any,
108110
});
109111

110-
// Add `error` field to payload which can catch resolver Error
111-
// and return it in mutation payload
112-
addErrorCatcherField(resolver);
112+
if (!opts?.disableErrorField) {
113+
// Add `error` field to payload which can catch resolver Error
114+
// and return it in mutation payload
115+
addErrorCatcherField(resolver);
116+
}
113117

114118
return resolver;
115119
}

src/resolvers/updateById.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export interface UpdateByIdResolverOpts {
1515
record?: RecordHelperArgsOpts;
1616
/** Customize payload.recordId field. If false, then this field will be removed. */
1717
recordId?: PayloadRecordIdHelperOpts | false;
18+
/** Customize payload.error field. If true, then this field will be removed. */
19+
disableErrorField?: boolean;
1820
}
1921

2022
type TArgs = {
@@ -117,9 +119,11 @@ export function updateById<TSource = any, TContext = any, TDoc extends Document
117119
}) as any,
118120
});
119121

120-
// Add `error` field to payload which can catch resolver Error
121-
// and return it in mutation payload
122-
addErrorCatcherField(resolver);
122+
if (!opts?.disableErrorField) {
123+
// Add `error` field to payload which can catch resolver Error
124+
// and return it in mutation payload
125+
addErrorCatcherField(resolver);
126+
}
123127

124128
return resolver;
125129
}

src/resolvers/updateMany.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export interface UpdateManyResolverOpts {
3131
sort?: SortHelperArgsOpts | false;
3232
limit?: LimitHelperArgsOpts | false;
3333
skip?: false;
34+
/** Customize payload.error field. If true, then this field will be removed. */
35+
disableErrorField?: boolean;
3436
}
3537

3638
type TArgs = {
@@ -142,9 +144,11 @@ export function updateMany<TSource = any, TContext = any, TDoc extends Document
142144
}) as any,
143145
});
144146

145-
// Add `error` field to payload which can catch resolver Error
146-
// and return it in mutation payload
147-
addErrorCatcherField(resolver);
147+
if (!opts?.disableErrorField) {
148+
// Add `error` field to payload which can catch resolver Error
149+
// and return it in mutation payload
150+
addErrorCatcherField(resolver);
151+
}
148152

149153
return resolver;
150154
}

0 commit comments

Comments
 (0)