@@ -17,53 +17,60 @@ export function getQueue(queueName: string, context: any): Queue {
1717 return Queue ;
1818}
1919
20- export function generateMutation (
21- schemaComposer : SchemaComposer < any > ,
22- fieldConfig : Omit < ObjectTypeComposerFieldConfigAsObjectDefinition < any , any > , 'type' > & {
23- type : ObjectTypeComposerAsObjectDefinition < any , any > ;
24- }
25- ) : ObjectTypeComposerFieldConfigAsObjectDefinition < any , any > {
26- let type : ObjectTypeComposer ;
27- try {
28- type = schemaComposer . createObjectTC ( fieldConfig . type as any ) ;
29- } catch ( e ) {
30- throw new Error ( 'Cannot wrap mutation payload cause it returns non-object type.' ) ;
31- }
20+ type FieldConfig = Omit < ObjectTypeComposerFieldConfigAsObjectDefinition < any , any > , 'type' > & {
21+ type : ObjectTypeComposerAsObjectDefinition < any , any > ;
22+ } ;
3223
33- type . addFields ( {
34- status : 'PayloadStatusEnum!' ,
35- query : 'Query!' ,
36- error : 'String' ,
37- errorCode : 'ErrorCodeEnum' ,
38- } ) ;
24+ type Generator = (
25+ fieldConfig : FieldConfig
26+ ) => ObjectTypeComposerFieldConfigAsObjectDefinition < any , any > ;
3927
40- const subResolve = fieldConfig . resolve || ( ( ) => ( { } ) ) ;
41- const resolve = async ( source , args , context , info ) => {
28+ export function createGenerateHelper ( schemaComposer : SchemaComposer < any > ) : Generator {
29+ return function generateMutation (
30+ fieldConfig : FieldConfig
31+ ) : ObjectTypeComposerFieldConfigAsObjectDefinition < any , any > {
32+ let type : ObjectTypeComposer ;
4233 try {
43- const subResult = await subResolve ( source , args , context , info ) ;
44- return {
45- query : { } ,
46- status : PayloadStatusEnum . OK ,
47- ...subResult ,
48- } ;
34+ type = schemaComposer . createObjectTC ( fieldConfig . type as any ) ;
4935 } catch ( e ) {
50- const requestedFields = getFlatProjectionFromAST ( info ) ;
51- if ( requestedFields ?. error || requestedFields ?. errorCode || requestedFields ?. status ) {
36+ throw new Error ( 'Cannot wrap mutation payload cause it returns non-object type.' ) ;
37+ }
38+
39+ type . addFields ( {
40+ status : 'PayloadStatusEnum!' ,
41+ query : 'Query!' ,
42+ error : 'String' ,
43+ errorCode : 'ErrorCodeEnum' ,
44+ } ) ;
45+
46+ const subResolve = fieldConfig . resolve || ( ( ) => ( { } ) ) ;
47+ const resolve = async ( source , args , context , info ) => {
48+ try {
49+ const subResult = await subResolve ( source , args , context , info ) ;
5250 return {
5351 query : { } ,
54- status : PayloadStatusEnum . ERROR ,
55- error : e . message ,
56- errorCode : e instanceof PayloadError ? e . code : ErrorCodeEnum . OTHER_ERROR ,
52+ status : PayloadStatusEnum . OK ,
53+ ...subResult ,
5754 } ;
58- } else {
59- throw e ;
55+ } catch ( e ) {
56+ const requestedFields = getFlatProjectionFromAST ( info ) ;
57+ if ( requestedFields ?. error || requestedFields ?. errorCode || requestedFields ?. status ) {
58+ return {
59+ query : { } ,
60+ status : PayloadStatusEnum . ERROR ,
61+ error : e . message ,
62+ errorCode : e instanceof PayloadError ? e . code : ErrorCodeEnum . OTHER_ERROR ,
63+ } ;
64+ } else {
65+ throw e ;
66+ }
6067 }
61- }
62- } ;
68+ } ;
6369
64- return {
65- ...fieldConfig ,
66- type,
67- resolve,
70+ return {
71+ ...fieldConfig ,
72+ type,
73+ resolve,
74+ } ;
6875 } ;
6976}
0 commit comments