You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.6 KiB
86 lines
3.6 KiB
4 months ago
|
import { __extends } from "tslib";
|
||
|
import { Observable } from "../../utilities/index.js";
|
||
|
import { ApolloLink } from "../core/index.js";
|
||
|
export function onError(errorHandler) {
|
||
|
return new ApolloLink(function (operation, forward) {
|
||
|
return new Observable(function (observer) {
|
||
|
var sub;
|
||
|
var retriedSub;
|
||
|
var retriedResult;
|
||
|
try {
|
||
|
sub = forward(operation).subscribe({
|
||
|
next: function (result) {
|
||
|
if (result.errors) {
|
||
|
retriedResult = errorHandler({
|
||
|
graphQLErrors: result.errors,
|
||
|
response: result,
|
||
|
operation: operation,
|
||
|
forward: forward,
|
||
|
});
|
||
|
if (retriedResult) {
|
||
|
retriedSub = retriedResult.subscribe({
|
||
|
next: observer.next.bind(observer),
|
||
|
error: observer.error.bind(observer),
|
||
|
complete: observer.complete.bind(observer),
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
observer.next(result);
|
||
|
},
|
||
|
error: function (networkError) {
|
||
|
retriedResult = errorHandler({
|
||
|
operation: operation,
|
||
|
networkError: networkError,
|
||
|
//Network errors can return GraphQL errors on for example a 403
|
||
|
graphQLErrors: networkError &&
|
||
|
networkError.result &&
|
||
|
networkError.result.errors,
|
||
|
forward: forward,
|
||
|
});
|
||
|
if (retriedResult) {
|
||
|
retriedSub = retriedResult.subscribe({
|
||
|
next: observer.next.bind(observer),
|
||
|
error: observer.error.bind(observer),
|
||
|
complete: observer.complete.bind(observer),
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
observer.error(networkError);
|
||
|
},
|
||
|
complete: function () {
|
||
|
// disable the previous sub from calling complete on observable
|
||
|
// if retry is in flight.
|
||
|
if (!retriedResult) {
|
||
|
observer.complete.bind(observer)();
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
catch (e) {
|
||
|
errorHandler({ networkError: e, operation: operation, forward: forward });
|
||
|
observer.error(e);
|
||
|
}
|
||
|
return function () {
|
||
|
if (sub)
|
||
|
sub.unsubscribe();
|
||
|
if (retriedSub)
|
||
|
sub.unsubscribe();
|
||
|
};
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
var ErrorLink = /** @class */ (function (_super) {
|
||
|
__extends(ErrorLink, _super);
|
||
|
function ErrorLink(errorHandler) {
|
||
|
var _this = _super.call(this) || this;
|
||
|
_this.link = onError(errorHandler);
|
||
|
return _this;
|
||
|
}
|
||
|
ErrorLink.prototype.request = function (operation, forward) {
|
||
|
return this.link.request(operation, forward);
|
||
|
};
|
||
|
return ErrorLink;
|
||
|
}(ApolloLink));
|
||
|
export { ErrorLink };
|
||
|
//# sourceMappingURL=index.js.map
|