Skip to content

Commit 02a8ba0

Browse files
committed
Merge branch 'master' of github.com:Urigo/graphql-modules
2 parents 9d3b6fa + 750cb31 commit 02a8ba0

File tree

2 files changed

+53
-5
lines changed

2 files changed

+53
-5
lines changed

packages/core/src/graphql-module.ts

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,14 +1020,30 @@ export class GraphQLModule<
10201020
try {
10211021
moduleContext = await this.context(info.session, true);
10221022
} catch (e) {
1023+
moduleContext.injector.callHookWithArgsAsync({
1024+
hook: 'onError',
1025+
args: [e],
1026+
instantiate: true
1027+
});
10231028
const logger = this.selfLogger;
10241029
if ('clientError' in logger) {
10251030
logger.clientError(e);
10261031
}
10271032
throw e;
10281033
}
10291034
info.schema = this.schema;
1030-
return resolver.call(typeResolvers, root, moduleContext, info);
1035+
let result;
1036+
try {
1037+
result = await resolver.call(typeResolvers, root, moduleContext, info);
1038+
} catch (e) {
1039+
moduleContext.injector.callHookWithArgsAsync({
1040+
hook: 'onError',
1041+
args: [e],
1042+
instantiate: true
1043+
});
1044+
throw e;
1045+
}
1046+
return result;
10311047
};
10321048
} else {
10331049
typeResolvers[prop] = async (root: any, args: any, appContext: any, info: any) => {
@@ -1041,14 +1057,30 @@ export class GraphQLModule<
10411057
try {
10421058
moduleContext = await this.context(info.session, true);
10431059
} catch (e) {
1060+
moduleContext.injector.callHookWithArgsAsync({
1061+
hook: 'onError',
1062+
args: [e],
1063+
instantiate: true
1064+
});
10441065
const logger = this.selfLogger;
10451066
if ('clientError' in logger) {
10461067
logger.clientError(e);
10471068
}
10481069
throw e;
10491070
}
10501071
info.schema = this.schema;
1051-
return resolver.call(typeResolvers[prop], root, args, moduleContext, info);
1072+
let result;
1073+
try {
1074+
result = await resolver.call(typeResolvers[prop], root, args, moduleContext, info);
1075+
} catch (e) {
1076+
moduleContext.injector.callHookWithArgsAsync({
1077+
hook: 'onError',
1078+
args: [e],
1079+
instantiate: true
1080+
});
1081+
throw e;
1082+
}
1083+
return result;
10521084
};
10531085
}
10541086
} else if (resolver && typeof resolver === 'object' && resolver['subscribe']) {
@@ -1071,7 +1103,18 @@ export class GraphQLModule<
10711103
throw e;
10721104
}
10731105
info.schema = this.schema;
1074-
return subscriber.call(typeResolvers[prop], root, args, moduleContext, info);
1106+
let result;
1107+
try {
1108+
result = await subscriber.call(typeResolvers[prop], root, args, moduleContext, info);
1109+
} catch (e) {
1110+
moduleContext.injector.callHookWithArgsAsync({
1111+
hook: 'onError',
1112+
args: [e],
1113+
instantiate: true
1114+
});
1115+
throw e;
1116+
}
1117+
return result;
10751118
};
10761119
}
10771120
}

packages/core/src/types.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,20 @@ export type OnOperationCompleteFn<WebSocket = any, OpId = string, OnOperationCom
3737
opId: OpId
3838
) => OnOperationCompleteResult;
3939
export interface OnOperationComplete<WebSocket = any, OpId = string, OnOperationCompleteResult = any> {
40-
onOperationComplete?: OnOperationCompleteFn<WebSocket, OpId, OnOperationCompleteResult>;
40+
onOperationComplete: OnOperationCompleteFn<WebSocket, OpId, OnOperationCompleteResult>;
4141
}
4242

4343
export type OnDisconnectFn<WebSocket = any, ConnectionContext = any, Result = any> = (
4444
websocket: WebSocket,
4545
connectionContext: ConnectionContext
4646
) => Result;
4747
export interface OnDisconnect<WebSocket = any, ConnectionContext = any, Result = any> {
48-
onDisconnect?: OnDisconnectFn<WebSocket, ConnectionContext, Result>;
48+
onDisconnect: OnDisconnectFn<WebSocket, ConnectionContext, Result>;
49+
}
50+
51+
export type OnErrorFn = (e: Error) => any;
52+
export interface OnError {
53+
onError: OnError;
4954
}
5055

5156
export interface SubscriptionHooks<

0 commit comments

Comments
 (0)