UNPKG

3.49 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var apollo_link_1 = require("apollo-link");
5exports.onError = function (errorHandler) {
6 return new apollo_link_1.ApolloLink(function (operation, forward) {
7 return new apollo_link_1.Observable(function (observer) {
8 var sub;
9 var retriedSub;
10 var retriedResult;
11 try {
12 sub = forward(operation).subscribe({
13 next: function (result) {
14 if (result.errors) {
15 retriedResult = errorHandler({
16 graphQLErrors: result.errors,
17 response: result,
18 operation: operation,
19 forward: forward,
20 });
21 if (retriedResult) {
22 retriedSub = retriedResult.subscribe({
23 next: observer.next.bind(observer),
24 error: observer.error.bind(observer),
25 complete: observer.complete.bind(observer),
26 });
27 return;
28 }
29 }
30 observer.next(result);
31 },
32 error: function (networkError) {
33 retriedResult = errorHandler({
34 operation: operation,
35 networkError: networkError,
36 graphQLErrors: networkError &&
37 networkError.result &&
38 networkError.result.errors,
39 forward: forward,
40 });
41 if (retriedResult) {
42 retriedSub = retriedResult.subscribe({
43 next: observer.next.bind(observer),
44 error: observer.error.bind(observer),
45 complete: observer.complete.bind(observer),
46 });
47 return;
48 }
49 observer.error(networkError);
50 },
51 complete: function () {
52 if (!retriedResult) {
53 observer.complete.bind(observer)();
54 }
55 },
56 });
57 }
58 catch (e) {
59 errorHandler({ networkError: e, operation: operation, forward: forward });
60 observer.error(e);
61 }
62 return function () {
63 if (sub)
64 sub.unsubscribe();
65 if (retriedSub)
66 sub.unsubscribe();
67 };
68 });
69 });
70};
71var ErrorLink = (function (_super) {
72 tslib_1.__extends(ErrorLink, _super);
73 function ErrorLink(errorHandler) {
74 var _this = _super.call(this) || this;
75 _this.link = exports.onError(errorHandler);
76 return _this;
77 }
78 ErrorLink.prototype.request = function (operation, forward) {
79 return this.link.request(operation, forward);
80 };
81 return ErrorLink;
82}(apollo_link_1.ApolloLink));
83exports.ErrorLink = ErrorLink;
84//# sourceMappingURL=index.js.map
\No newline at end of file