@apollo/client 3.7.0-beta.2 → 3.7.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@ var utils = require('../link/utils');
15
15
  var tsInvariant = require('ts-invariant');
16
16
  var graphqlTag = require('graphql-tag');
17
17
 
18
- var version = '3.7.0-beta.2';
18
+ var version = '3.7.0-beta.3';
19
19
 
20
20
  exports.NetworkStatus = void 0;
21
21
  (function (NetworkStatus) {
@@ -5,7 +5,7 @@
5
5
  // consult the @apollo/client/invariantErrorCodes.js file specific to
6
6
  // your @apollo/client version. This file is not meant to be imported.
7
7
  {
8
- "@apollo/client version": "3.7.0-beta.2",
8
+ "@apollo/client version": "3.7.0-beta.3",
9
9
 
10
10
  1: {
11
11
  file: "@apollo/client/cache/inmemory/entityStore.js",
@@ -9,7 +9,7 @@ var utilities = require('../../utilities');
9
9
  var OperationBatcher = (function () {
10
10
  function OperationBatcher(_a) {
11
11
  var batchDebounce = _a.batchDebounce, batchInterval = _a.batchInterval, batchMax = _a.batchMax, batchHandler = _a.batchHandler, batchKey = _a.batchKey;
12
- this.queuedRequests = new Map();
12
+ this.batchesByKey = new Map();
13
13
  this.batchDebounce = batchDebounce;
14
14
  this.batchInterval = batchInterval;
15
15
  this.batchMax = batchMax || 0;
@@ -18,61 +18,74 @@ var OperationBatcher = (function () {
18
18
  }
19
19
  OperationBatcher.prototype.enqueueRequest = function (request) {
20
20
  var _this = this;
21
- var requestCopy = tslib.__assign({}, request);
22
- var queued = false;
21
+ var requestCopy = tslib.__assign(tslib.__assign({}, request), { next: [], error: [], complete: [], subscribers: new Set() });
23
22
  var key = this.batchKey(request.operation);
24
23
  if (!requestCopy.observable) {
25
24
  requestCopy.observable = new utilities.Observable(function (observer) {
26
- if (!_this.queuedRequests.has(key)) {
27
- _this.queuedRequests.set(key, []);
25
+ var batch = _this.batchesByKey.get(key);
26
+ if (!batch)
27
+ _this.batchesByKey.set(key, batch = new Set());
28
+ var isFirstEnqueuedRequest = batch.size === 0;
29
+ var isFirstSubscriber = requestCopy.subscribers.size === 0;
30
+ requestCopy.subscribers.add(observer);
31
+ if (isFirstSubscriber) {
32
+ batch.add(requestCopy);
28
33
  }
29
- if (!queued) {
30
- _this.queuedRequests.get(key).push(requestCopy);
31
- queued = true;
32
- }
33
- requestCopy.next = requestCopy.next || [];
34
- if (observer.next)
34
+ if (observer.next) {
35
35
  requestCopy.next.push(observer.next.bind(observer));
36
- requestCopy.error = requestCopy.error || [];
37
- if (observer.error)
36
+ }
37
+ if (observer.error) {
38
38
  requestCopy.error.push(observer.error.bind(observer));
39
- requestCopy.complete = requestCopy.complete || [];
40
- if (observer.complete)
39
+ }
40
+ if (observer.complete) {
41
41
  requestCopy.complete.push(observer.complete.bind(observer));
42
- if (_this.queuedRequests.get(key).length === 1) {
42
+ }
43
+ if (isFirstEnqueuedRequest) {
43
44
  _this.scheduleQueueConsumption(key);
44
45
  }
45
46
  else if (_this.batchDebounce) {
46
47
  clearTimeout(_this.scheduledBatchTimer);
47
48
  _this.scheduleQueueConsumption(key);
48
49
  }
49
- if (_this.queuedRequests.get(key).length === _this.batchMax) {
50
+ if (batch.size === _this.batchMax) {
50
51
  _this.consumeQueue(key);
51
52
  }
53
+ return function () {
54
+ var _a;
55
+ if (requestCopy.subscribers.delete(observer) &&
56
+ requestCopy.subscribers.size < 1) {
57
+ if (batch.delete(requestCopy) && batch.size < 1) {
58
+ _this.consumeQueue(key);
59
+ (_a = batch.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
60
+ }
61
+ }
62
+ };
52
63
  });
53
64
  }
54
65
  return requestCopy.observable;
55
66
  };
56
67
  OperationBatcher.prototype.consumeQueue = function (key) {
57
- var requestKey = key || '';
58
- var queuedRequests = this.queuedRequests.get(requestKey);
59
- if (!queuedRequests) {
68
+ if (key === void 0) { key = ''; }
69
+ var batch = this.batchesByKey.get(key);
70
+ this.batchesByKey.delete(key);
71
+ if (!batch || !batch.size) {
60
72
  return;
61
73
  }
62
- this.queuedRequests.delete(requestKey);
63
- var requests = queuedRequests.map(function (queuedRequest) { return queuedRequest.operation; });
64
- var forwards = queuedRequests.map(function (queuedRequest) { return queuedRequest.forward; });
74
+ var operations = [];
75
+ var forwards = [];
65
76
  var observables = [];
66
77
  var nexts = [];
67
78
  var errors = [];
68
79
  var completes = [];
69
- queuedRequests.forEach(function (batchableRequest, index) {
70
- observables.push(batchableRequest.observable);
71
- nexts.push(batchableRequest.next);
72
- errors.push(batchableRequest.error);
73
- completes.push(batchableRequest.complete);
80
+ batch.forEach(function (request) {
81
+ operations.push(request.operation);
82
+ forwards.push(request.forward);
83
+ observables.push(request.observable);
84
+ nexts.push(request.next);
85
+ errors.push(request.error);
86
+ completes.push(request.complete);
74
87
  });
75
- var batchedObservable = this.batchHandler(requests, forwards) || utilities.Observable.of();
88
+ var batchedObservable = this.batchHandler(operations, forwards) || utilities.Observable.of();
76
89
  var onError = function (error) {
77
90
  errors.forEach(function (rejecters) {
78
91
  if (rejecters) {
@@ -80,7 +93,7 @@ var OperationBatcher = (function () {
80
93
  }
81
94
  });
82
95
  };
83
- batchedObservable.subscribe({
96
+ batch.subscription = batchedObservable.subscribe({
84
97
  next: function (results) {
85
98
  if (!Array.isArray(results)) {
86
99
  results = [results];
@@ -109,13 +122,9 @@ var OperationBatcher = (function () {
109
122
  };
110
123
  OperationBatcher.prototype.scheduleQueueConsumption = function (key) {
111
124
  var _this = this;
112
- var requestKey = key || '';
113
- this.scheduledBatchTimer = (setTimeout(function () {
114
- if (_this.queuedRequests.get(requestKey) &&
115
- _this.queuedRequests.get(requestKey).length) {
116
- _this.consumeQueue(requestKey);
117
- }
118
- }, this.batchInterval));
125
+ this.scheduledBatchTimer = setTimeout(function () {
126
+ _this.consumeQueue(key);
127
+ }, this.batchInterval);
119
128
  };
120
129
  return OperationBatcher;
121
130
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"batch.cjs","sources":["batching.js","batchLink.js"],"sourcesContent":["import { __assign } from \"tslib\";\nimport { Observable } from '../../utilities';\nvar OperationBatcher = (function () {\n function OperationBatcher(_a) {\n var batchDebounce = _a.batchDebounce, batchInterval = _a.batchInterval, batchMax = _a.batchMax, batchHandler = _a.batchHandler, batchKey = _a.batchKey;\n this.queuedRequests = new Map();\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval;\n this.batchMax = batchMax || 0;\n this.batchHandler = batchHandler;\n this.batchKey = batchKey || (function () { return ''; });\n }\n OperationBatcher.prototype.enqueueRequest = function (request) {\n var _this = this;\n var requestCopy = __assign({}, request);\n var queued = false;\n var key = this.batchKey(request.operation);\n if (!requestCopy.observable) {\n requestCopy.observable = new Observable(function (observer) {\n if (!_this.queuedRequests.has(key)) {\n _this.queuedRequests.set(key, []);\n }\n if (!queued) {\n _this.queuedRequests.get(key).push(requestCopy);\n queued = true;\n }\n requestCopy.next = requestCopy.next || [];\n if (observer.next)\n requestCopy.next.push(observer.next.bind(observer));\n requestCopy.error = requestCopy.error || [];\n if (observer.error)\n requestCopy.error.push(observer.error.bind(observer));\n requestCopy.complete = requestCopy.complete || [];\n if (observer.complete)\n requestCopy.complete.push(observer.complete.bind(observer));\n if (_this.queuedRequests.get(key).length === 1) {\n _this.scheduleQueueConsumption(key);\n }\n else if (_this.batchDebounce) {\n clearTimeout(_this.scheduledBatchTimer);\n _this.scheduleQueueConsumption(key);\n }\n if (_this.queuedRequests.get(key).length === _this.batchMax) {\n _this.consumeQueue(key);\n }\n });\n }\n return requestCopy.observable;\n };\n OperationBatcher.prototype.consumeQueue = function (key) {\n var requestKey = key || '';\n var queuedRequests = this.queuedRequests.get(requestKey);\n if (!queuedRequests) {\n return;\n }\n this.queuedRequests.delete(requestKey);\n var requests = queuedRequests.map(function (queuedRequest) { return queuedRequest.operation; });\n var forwards = queuedRequests.map(function (queuedRequest) { return queuedRequest.forward; });\n var observables = [];\n var nexts = [];\n var errors = [];\n var completes = [];\n queuedRequests.forEach(function (batchableRequest, index) {\n observables.push(batchableRequest.observable);\n nexts.push(batchableRequest.next);\n errors.push(batchableRequest.error);\n completes.push(batchableRequest.complete);\n });\n var batchedObservable = this.batchHandler(requests, forwards) || Observable.of();\n var onError = function (error) {\n errors.forEach(function (rejecters) {\n if (rejecters) {\n rejecters.forEach(function (e) { return e(error); });\n }\n });\n };\n batchedObservable.subscribe({\n next: function (results) {\n if (!Array.isArray(results)) {\n results = [results];\n }\n if (nexts.length !== results.length) {\n var error = new Error(\"server returned results with length \".concat(results.length, \", expected length of \").concat(nexts.length));\n error.result = results;\n return onError(error);\n }\n results.forEach(function (result, index) {\n if (nexts[index]) {\n nexts[index].forEach(function (next) { return next(result); });\n }\n });\n },\n error: onError,\n complete: function () {\n completes.forEach(function (complete) {\n if (complete) {\n complete.forEach(function (c) { return c(); });\n }\n });\n },\n });\n return observables;\n };\n OperationBatcher.prototype.scheduleQueueConsumption = function (key) {\n var _this = this;\n var requestKey = key || '';\n this.scheduledBatchTimer = (setTimeout(function () {\n if (_this.queuedRequests.get(requestKey) &&\n _this.queuedRequests.get(requestKey).length) {\n _this.consumeQueue(requestKey);\n }\n }, this.batchInterval));\n };\n return OperationBatcher;\n}());\nexport { OperationBatcher };\n//# sourceMappingURL=batching.js.map","import { __extends } from \"tslib\";\nimport { ApolloLink } from '../core';\nimport { OperationBatcher } from './batching';\nexport { OperationBatcher } from './batching';\nvar BatchLink = (function (_super) {\n __extends(BatchLink, _super);\n function BatchLink(fetchParams) {\n var _this = _super.call(this) || this;\n var _a = fetchParams || {}, batchDebounce = _a.batchDebounce, _b = _a.batchInterval, batchInterval = _b === void 0 ? 10 : _b, _c = _a.batchMax, batchMax = _c === void 0 ? 0 : _c, _d = _a.batchHandler, batchHandler = _d === void 0 ? function () { return null; } : _d, _e = _a.batchKey, batchKey = _e === void 0 ? function () { return ''; } : _e;\n _this.batcher = new OperationBatcher({\n batchDebounce: batchDebounce,\n batchInterval: batchInterval,\n batchMax: batchMax,\n batchHandler: batchHandler,\n batchKey: batchKey,\n });\n if (fetchParams.batchHandler.length <= 1) {\n _this.request = function (operation) { return _this.batcher.enqueueRequest({ operation: operation }); };\n }\n return _this;\n }\n BatchLink.prototype.request = function (operation, forward) {\n return this.batcher.enqueueRequest({\n operation: operation,\n forward: forward,\n });\n };\n return BatchLink;\n}(ApolloLink));\nexport { BatchLink };\n//# sourceMappingURL=batchLink.js.map"],"names":["__assign","Observable","__extends","ApolloLink"],"mappings":"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"}
1
+ {"version":3,"file":"batch.cjs","sources":["batching.js","batchLink.js"],"sourcesContent":["import { __assign } from \"tslib\";\nimport { Observable } from '../../utilities';\nvar OperationBatcher = (function () {\n function OperationBatcher(_a) {\n var batchDebounce = _a.batchDebounce, batchInterval = _a.batchInterval, batchMax = _a.batchMax, batchHandler = _a.batchHandler, batchKey = _a.batchKey;\n this.batchesByKey = new Map();\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval;\n this.batchMax = batchMax || 0;\n this.batchHandler = batchHandler;\n this.batchKey = batchKey || (function () { return ''; });\n }\n OperationBatcher.prototype.enqueueRequest = function (request) {\n var _this = this;\n var requestCopy = __assign(__assign({}, request), { next: [], error: [], complete: [], subscribers: new Set() });\n var key = this.batchKey(request.operation);\n if (!requestCopy.observable) {\n requestCopy.observable = new Observable(function (observer) {\n var batch = _this.batchesByKey.get(key);\n if (!batch)\n _this.batchesByKey.set(key, batch = new Set());\n var isFirstEnqueuedRequest = batch.size === 0;\n var isFirstSubscriber = requestCopy.subscribers.size === 0;\n requestCopy.subscribers.add(observer);\n if (isFirstSubscriber) {\n batch.add(requestCopy);\n }\n if (observer.next) {\n requestCopy.next.push(observer.next.bind(observer));\n }\n if (observer.error) {\n requestCopy.error.push(observer.error.bind(observer));\n }\n if (observer.complete) {\n requestCopy.complete.push(observer.complete.bind(observer));\n }\n if (isFirstEnqueuedRequest) {\n _this.scheduleQueueConsumption(key);\n }\n else if (_this.batchDebounce) {\n clearTimeout(_this.scheduledBatchTimer);\n _this.scheduleQueueConsumption(key);\n }\n if (batch.size === _this.batchMax) {\n _this.consumeQueue(key);\n }\n return function () {\n var _a;\n if (requestCopy.subscribers.delete(observer) &&\n requestCopy.subscribers.size < 1) {\n if (batch.delete(requestCopy) && batch.size < 1) {\n _this.consumeQueue(key);\n (_a = batch.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n }\n }\n };\n });\n }\n return requestCopy.observable;\n };\n OperationBatcher.prototype.consumeQueue = function (key) {\n if (key === void 0) { key = ''; }\n var batch = this.batchesByKey.get(key);\n this.batchesByKey.delete(key);\n if (!batch || !batch.size) {\n return;\n }\n var operations = [];\n var forwards = [];\n var observables = [];\n var nexts = [];\n var errors = [];\n var completes = [];\n batch.forEach(function (request) {\n operations.push(request.operation);\n forwards.push(request.forward);\n observables.push(request.observable);\n nexts.push(request.next);\n errors.push(request.error);\n completes.push(request.complete);\n });\n var batchedObservable = this.batchHandler(operations, forwards) || Observable.of();\n var onError = function (error) {\n errors.forEach(function (rejecters) {\n if (rejecters) {\n rejecters.forEach(function (e) { return e(error); });\n }\n });\n };\n batch.subscription = batchedObservable.subscribe({\n next: function (results) {\n if (!Array.isArray(results)) {\n results = [results];\n }\n if (nexts.length !== results.length) {\n var error = new Error(\"server returned results with length \".concat(results.length, \", expected length of \").concat(nexts.length));\n error.result = results;\n return onError(error);\n }\n results.forEach(function (result, index) {\n if (nexts[index]) {\n nexts[index].forEach(function (next) { return next(result); });\n }\n });\n },\n error: onError,\n complete: function () {\n completes.forEach(function (complete) {\n if (complete) {\n complete.forEach(function (c) { return c(); });\n }\n });\n },\n });\n return observables;\n };\n OperationBatcher.prototype.scheduleQueueConsumption = function (key) {\n var _this = this;\n this.scheduledBatchTimer = setTimeout(function () {\n _this.consumeQueue(key);\n }, this.batchInterval);\n };\n return OperationBatcher;\n}());\nexport { OperationBatcher };\n//# sourceMappingURL=batching.js.map","import { __extends } from \"tslib\";\nimport { ApolloLink } from '../core';\nimport { OperationBatcher } from './batching';\nexport { OperationBatcher } from './batching';\nvar BatchLink = (function (_super) {\n __extends(BatchLink, _super);\n function BatchLink(fetchParams) {\n var _this = _super.call(this) || this;\n var _a = fetchParams || {}, batchDebounce = _a.batchDebounce, _b = _a.batchInterval, batchInterval = _b === void 0 ? 10 : _b, _c = _a.batchMax, batchMax = _c === void 0 ? 0 : _c, _d = _a.batchHandler, batchHandler = _d === void 0 ? function () { return null; } : _d, _e = _a.batchKey, batchKey = _e === void 0 ? function () { return ''; } : _e;\n _this.batcher = new OperationBatcher({\n batchDebounce: batchDebounce,\n batchInterval: batchInterval,\n batchMax: batchMax,\n batchHandler: batchHandler,\n batchKey: batchKey,\n });\n if (fetchParams.batchHandler.length <= 1) {\n _this.request = function (operation) { return _this.batcher.enqueueRequest({ operation: operation }); };\n }\n return _this;\n }\n BatchLink.prototype.request = function (operation, forward) {\n return this.batcher.enqueueRequest({\n operation: operation,\n forward: forward,\n });\n };\n return BatchLink;\n}(ApolloLink));\nexport { BatchLink };\n//# sourceMappingURL=batchLink.js.map"],"names":["__assign","Observable","__extends","ApolloLink"],"mappings":"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"}
@@ -9,7 +9,7 @@ var utilities = require('../../utilities');
9
9
  var OperationBatcher = (function () {
10
10
  function OperationBatcher(_a) {
11
11
  var batchDebounce = _a.batchDebounce, batchInterval = _a.batchInterval, batchMax = _a.batchMax, batchHandler = _a.batchHandler, batchKey = _a.batchKey;
12
- this.queuedRequests = new Map();
12
+ this.batchesByKey = new Map();
13
13
  this.batchDebounce = batchDebounce;
14
14
  this.batchInterval = batchInterval;
15
15
  this.batchMax = batchMax || 0;
@@ -18,61 +18,74 @@ var OperationBatcher = (function () {
18
18
  }
19
19
  OperationBatcher.prototype.enqueueRequest = function (request) {
20
20
  var _this = this;
21
- var requestCopy = tslib.__assign({}, request);
22
- var queued = false;
21
+ var requestCopy = tslib.__assign(tslib.__assign({}, request), { next: [], error: [], complete: [], subscribers: new Set() });
23
22
  var key = this.batchKey(request.operation);
24
23
  if (!requestCopy.observable) {
25
24
  requestCopy.observable = new utilities.Observable(function (observer) {
26
- if (!_this.queuedRequests.has(key)) {
27
- _this.queuedRequests.set(key, []);
25
+ var batch = _this.batchesByKey.get(key);
26
+ if (!batch)
27
+ _this.batchesByKey.set(key, batch = new Set());
28
+ var isFirstEnqueuedRequest = batch.size === 0;
29
+ var isFirstSubscriber = requestCopy.subscribers.size === 0;
30
+ requestCopy.subscribers.add(observer);
31
+ if (isFirstSubscriber) {
32
+ batch.add(requestCopy);
28
33
  }
29
- if (!queued) {
30
- _this.queuedRequests.get(key).push(requestCopy);
31
- queued = true;
32
- }
33
- requestCopy.next = requestCopy.next || [];
34
- if (observer.next)
34
+ if (observer.next) {
35
35
  requestCopy.next.push(observer.next.bind(observer));
36
- requestCopy.error = requestCopy.error || [];
37
- if (observer.error)
36
+ }
37
+ if (observer.error) {
38
38
  requestCopy.error.push(observer.error.bind(observer));
39
- requestCopy.complete = requestCopy.complete || [];
40
- if (observer.complete)
39
+ }
40
+ if (observer.complete) {
41
41
  requestCopy.complete.push(observer.complete.bind(observer));
42
- if (_this.queuedRequests.get(key).length === 1) {
42
+ }
43
+ if (isFirstEnqueuedRequest) {
43
44
  _this.scheduleQueueConsumption(key);
44
45
  }
45
46
  else if (_this.batchDebounce) {
46
47
  clearTimeout(_this.scheduledBatchTimer);
47
48
  _this.scheduleQueueConsumption(key);
48
49
  }
49
- if (_this.queuedRequests.get(key).length === _this.batchMax) {
50
+ if (batch.size === _this.batchMax) {
50
51
  _this.consumeQueue(key);
51
52
  }
53
+ return function () {
54
+ var _a;
55
+ if (requestCopy.subscribers.delete(observer) &&
56
+ requestCopy.subscribers.size < 1) {
57
+ if (batch.delete(requestCopy) && batch.size < 1) {
58
+ _this.consumeQueue(key);
59
+ (_a = batch.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
60
+ }
61
+ }
62
+ };
52
63
  });
53
64
  }
54
65
  return requestCopy.observable;
55
66
  };
56
67
  OperationBatcher.prototype.consumeQueue = function (key) {
57
- var requestKey = key || '';
58
- var queuedRequests = this.queuedRequests.get(requestKey);
59
- if (!queuedRequests) {
68
+ if (key === void 0) { key = ''; }
69
+ var batch = this.batchesByKey.get(key);
70
+ this.batchesByKey.delete(key);
71
+ if (!batch || !batch.size) {
60
72
  return;
61
73
  }
62
- this.queuedRequests.delete(requestKey);
63
- var requests = queuedRequests.map(function (queuedRequest) { return queuedRequest.operation; });
64
- var forwards = queuedRequests.map(function (queuedRequest) { return queuedRequest.forward; });
74
+ var operations = [];
75
+ var forwards = [];
65
76
  var observables = [];
66
77
  var nexts = [];
67
78
  var errors = [];
68
79
  var completes = [];
69
- queuedRequests.forEach(function (batchableRequest, index) {
70
- observables.push(batchableRequest.observable);
71
- nexts.push(batchableRequest.next);
72
- errors.push(batchableRequest.error);
73
- completes.push(batchableRequest.complete);
80
+ batch.forEach(function (request) {
81
+ operations.push(request.operation);
82
+ forwards.push(request.forward);
83
+ observables.push(request.observable);
84
+ nexts.push(request.next);
85
+ errors.push(request.error);
86
+ completes.push(request.complete);
74
87
  });
75
- var batchedObservable = this.batchHandler(requests, forwards) || utilities.Observable.of();
88
+ var batchedObservable = this.batchHandler(operations, forwards) || utilities.Observable.of();
76
89
  var onError = function (error) {
77
90
  errors.forEach(function (rejecters) {
78
91
  if (rejecters) {
@@ -80,7 +93,7 @@ var OperationBatcher = (function () {
80
93
  }
81
94
  });
82
95
  };
83
- batchedObservable.subscribe({
96
+ batch.subscription = batchedObservable.subscribe({
84
97
  next: function (results) {
85
98
  if (!Array.isArray(results)) {
86
99
  results = [results];
@@ -109,13 +122,9 @@ var OperationBatcher = (function () {
109
122
  };
110
123
  OperationBatcher.prototype.scheduleQueueConsumption = function (key) {
111
124
  var _this = this;
112
- var requestKey = key || '';
113
- this.scheduledBatchTimer = (setTimeout(function () {
114
- if (_this.queuedRequests.get(requestKey) &&
115
- _this.queuedRequests.get(requestKey).length) {
116
- _this.consumeQueue(requestKey);
117
- }
118
- }, this.batchInterval));
125
+ this.scheduledBatchTimer = setTimeout(function () {
126
+ _this.consumeQueue(key);
127
+ }, this.batchInterval);
119
128
  };
120
129
  return OperationBatcher;
121
130
  }());
@@ -1,16 +1,12 @@
1
- import { Operation, FetchResult, NextLink } from '../core';
1
+ import { FetchResult, NextLink, Operation } from '../core';
2
2
  import { Observable } from '../../utilities';
3
3
  export declare type BatchHandler = (operations: Operation[], forward?: (NextLink | undefined)[]) => Observable<FetchResult[]> | null;
4
4
  export interface BatchableRequest {
5
5
  operation: Operation;
6
6
  forward?: NextLink;
7
- observable?: Observable<FetchResult>;
8
- next?: Array<(result: FetchResult) => void>;
9
- error?: Array<(error: Error) => void>;
10
- complete?: Array<() => void>;
11
7
  }
12
8
  export declare class OperationBatcher {
13
- queuedRequests: Map<string, BatchableRequest[]>;
9
+ private batchesByKey;
14
10
  private scheduledBatchTimer;
15
11
  private batchDebounce?;
16
12
  private batchInterval?;
@@ -1 +1 @@
1
- {"version":3,"file":"batching.d.ts","sourceRoot":"","sources":["../../../src/link/batch/batching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,oBAAY,YAAY,GAAG,CACzB,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,CAAC,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,KAC/B,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;IAKnB,UAAU,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;CAC9B;AAKD,qBAAa,gBAAgB;IAGpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,aAAa,CAAC,CAAU;IAChC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAmC;gBAEvC,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,EAAE;QACD,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,YAAY,CAAC;QAC3B,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC;KAC7C;IASM,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;IAmDlE,YAAY,CACjB,GAAG,CAAC,EAAE,MAAM,GACX,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS;IA+EtD,OAAO,CAAC,wBAAwB;CAWjC"}
1
+ {"version":3,"file":"batching.d.ts","sourceRoot":"","sources":["../../../src/link/batch/batching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAErE,oBAAY,YAAY,GAAG,CACzB,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,CAAC,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,KAC/B,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAmBD,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,YAAY,CAAmC;IAEvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,aAAa,CAAC,CAAU;IAChC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAmC;gBAEvC,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,EAAE;QACD,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,YAAY,CAAC;QAC3B,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC;KAC7C;IAQM,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC;IAwElE,YAAY,CACjB,GAAG,GAAE,MAAW,GACf,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS;IA8EtD,OAAO,CAAC,wBAAwB;CAKjC"}
@@ -3,7 +3,7 @@ import { Observable } from "../../utilities/index.js";
3
3
  var OperationBatcher = (function () {
4
4
  function OperationBatcher(_a) {
5
5
  var batchDebounce = _a.batchDebounce, batchInterval = _a.batchInterval, batchMax = _a.batchMax, batchHandler = _a.batchHandler, batchKey = _a.batchKey;
6
- this.queuedRequests = new Map();
6
+ this.batchesByKey = new Map();
7
7
  this.batchDebounce = batchDebounce;
8
8
  this.batchInterval = batchInterval;
9
9
  this.batchMax = batchMax || 0;
@@ -12,61 +12,74 @@ var OperationBatcher = (function () {
12
12
  }
13
13
  OperationBatcher.prototype.enqueueRequest = function (request) {
14
14
  var _this = this;
15
- var requestCopy = __assign({}, request);
16
- var queued = false;
15
+ var requestCopy = __assign(__assign({}, request), { next: [], error: [], complete: [], subscribers: new Set() });
17
16
  var key = this.batchKey(request.operation);
18
17
  if (!requestCopy.observable) {
19
18
  requestCopy.observable = new Observable(function (observer) {
20
- if (!_this.queuedRequests.has(key)) {
21
- _this.queuedRequests.set(key, []);
19
+ var batch = _this.batchesByKey.get(key);
20
+ if (!batch)
21
+ _this.batchesByKey.set(key, batch = new Set());
22
+ var isFirstEnqueuedRequest = batch.size === 0;
23
+ var isFirstSubscriber = requestCopy.subscribers.size === 0;
24
+ requestCopy.subscribers.add(observer);
25
+ if (isFirstSubscriber) {
26
+ batch.add(requestCopy);
22
27
  }
23
- if (!queued) {
24
- _this.queuedRequests.get(key).push(requestCopy);
25
- queued = true;
26
- }
27
- requestCopy.next = requestCopy.next || [];
28
- if (observer.next)
28
+ if (observer.next) {
29
29
  requestCopy.next.push(observer.next.bind(observer));
30
- requestCopy.error = requestCopy.error || [];
31
- if (observer.error)
30
+ }
31
+ if (observer.error) {
32
32
  requestCopy.error.push(observer.error.bind(observer));
33
- requestCopy.complete = requestCopy.complete || [];
34
- if (observer.complete)
33
+ }
34
+ if (observer.complete) {
35
35
  requestCopy.complete.push(observer.complete.bind(observer));
36
- if (_this.queuedRequests.get(key).length === 1) {
36
+ }
37
+ if (isFirstEnqueuedRequest) {
37
38
  _this.scheduleQueueConsumption(key);
38
39
  }
39
40
  else if (_this.batchDebounce) {
40
41
  clearTimeout(_this.scheduledBatchTimer);
41
42
  _this.scheduleQueueConsumption(key);
42
43
  }
43
- if (_this.queuedRequests.get(key).length === _this.batchMax) {
44
+ if (batch.size === _this.batchMax) {
44
45
  _this.consumeQueue(key);
45
46
  }
47
+ return function () {
48
+ var _a;
49
+ if (requestCopy.subscribers.delete(observer) &&
50
+ requestCopy.subscribers.size < 1) {
51
+ if (batch.delete(requestCopy) && batch.size < 1) {
52
+ _this.consumeQueue(key);
53
+ (_a = batch.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
54
+ }
55
+ }
56
+ };
46
57
  });
47
58
  }
48
59
  return requestCopy.observable;
49
60
  };
50
61
  OperationBatcher.prototype.consumeQueue = function (key) {
51
- var requestKey = key || '';
52
- var queuedRequests = this.queuedRequests.get(requestKey);
53
- if (!queuedRequests) {
62
+ if (key === void 0) { key = ''; }
63
+ var batch = this.batchesByKey.get(key);
64
+ this.batchesByKey.delete(key);
65
+ if (!batch || !batch.size) {
54
66
  return;
55
67
  }
56
- this.queuedRequests.delete(requestKey);
57
- var requests = queuedRequests.map(function (queuedRequest) { return queuedRequest.operation; });
58
- var forwards = queuedRequests.map(function (queuedRequest) { return queuedRequest.forward; });
68
+ var operations = [];
69
+ var forwards = [];
59
70
  var observables = [];
60
71
  var nexts = [];
61
72
  var errors = [];
62
73
  var completes = [];
63
- queuedRequests.forEach(function (batchableRequest, index) {
64
- observables.push(batchableRequest.observable);
65
- nexts.push(batchableRequest.next);
66
- errors.push(batchableRequest.error);
67
- completes.push(batchableRequest.complete);
74
+ batch.forEach(function (request) {
75
+ operations.push(request.operation);
76
+ forwards.push(request.forward);
77
+ observables.push(request.observable);
78
+ nexts.push(request.next);
79
+ errors.push(request.error);
80
+ completes.push(request.complete);
68
81
  });
69
- var batchedObservable = this.batchHandler(requests, forwards) || Observable.of();
82
+ var batchedObservable = this.batchHandler(operations, forwards) || Observable.of();
70
83
  var onError = function (error) {
71
84
  errors.forEach(function (rejecters) {
72
85
  if (rejecters) {
@@ -74,7 +87,7 @@ var OperationBatcher = (function () {
74
87
  }
75
88
  });
76
89
  };
77
- batchedObservable.subscribe({
90
+ batch.subscription = batchedObservable.subscribe({
78
91
  next: function (results) {
79
92
  if (!Array.isArray(results)) {
80
93
  results = [results];
@@ -103,13 +116,9 @@ var OperationBatcher = (function () {
103
116
  };
104
117
  OperationBatcher.prototype.scheduleQueueConsumption = function (key) {
105
118
  var _this = this;
106
- var requestKey = key || '';
107
- this.scheduledBatchTimer = (setTimeout(function () {
108
- if (_this.queuedRequests.get(requestKey) &&
109
- _this.queuedRequests.get(requestKey).length) {
110
- _this.consumeQueue(requestKey);
111
- }
112
- }, this.batchInterval));
119
+ this.scheduledBatchTimer = setTimeout(function () {
120
+ _this.consumeQueue(key);
121
+ }, this.batchInterval);
113
122
  };
114
123
  return OperationBatcher;
115
124
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"batching.js","sourceRoot":"","sources":["../../../src/link/batch/batching.ts"],"names":[],"mappings":"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","sourcesContent":["import { Operation, FetchResult, NextLink } from '../core';\nimport { Observable } from '../../utilities';\n\nexport type BatchHandler = (\n operations: Operation[],\n forward?: (NextLink | undefined)[],\n) => Observable<FetchResult[]> | null;\n\nexport interface BatchableRequest {\n operation: Operation;\n forward?: NextLink;\n\n // promise is created when the query fetch request is\n // added to the queue and is resolved once the result is back\n // from the server.\n observable?: Observable<FetchResult>;\n next?: Array<(result: FetchResult) => void>;\n error?: Array<(error: Error) => void>;\n complete?: Array<() => void>;\n}\n\n// QueryBatcher doesn't fire requests immediately. Requests that were enqueued within\n// a certain amount of time (configurable through `batchInterval`) will be batched together\n// into one query.\nexport class OperationBatcher {\n // Queue on which the QueryBatcher will operate on a per-tick basis.\n // Public only for testing\n public queuedRequests: Map<string, BatchableRequest[]>;\n\n private scheduledBatchTimer: ReturnType<typeof setTimeout>;\n private batchDebounce?: boolean;\n private batchInterval?: number;\n private batchMax: number;\n\n //This function is called to the queries in the queue to the server.\n private batchHandler: BatchHandler;\n private batchKey: (operation: Operation) => string;\n\n constructor({\n batchDebounce,\n batchInterval,\n batchMax,\n batchHandler,\n batchKey,\n }: {\n batchDebounce?: boolean;\n batchInterval?: number;\n batchMax?: number;\n batchHandler: BatchHandler;\n batchKey?: (operation: Operation) => string;\n }) {\n this.queuedRequests = new Map();\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval;\n this.batchMax = batchMax || 0;\n this.batchHandler = batchHandler;\n this.batchKey = batchKey || (() => '');\n }\n\n public enqueueRequest(request: BatchableRequest): Observable<FetchResult> {\n const requestCopy = {\n ...request,\n };\n let queued = false;\n\n const key = this.batchKey(request.operation);\n\n if (!requestCopy.observable) {\n requestCopy.observable = new Observable<FetchResult>(observer => {\n if (!this.queuedRequests.has(key)) {\n this.queuedRequests.set(key, []);\n }\n\n if (!queued) {\n this.queuedRequests.get(key)!.push(requestCopy);\n queued = true;\n }\n\n //called for each subscriber, so need to save all listeners(next, error, complete)\n requestCopy.next = requestCopy.next || [];\n if (observer.next) requestCopy.next.push(observer.next.bind(observer));\n\n requestCopy.error = requestCopy.error || [];\n if (observer.error)\n requestCopy.error.push(observer.error.bind(observer));\n\n requestCopy.complete = requestCopy.complete || [];\n if (observer.complete)\n requestCopy.complete.push(observer.complete.bind(observer));\n\n // The first enqueued request triggers the queue consumption after `batchInterval` milliseconds.\n if (this.queuedRequests.get(key)!.length === 1) {\n this.scheduleQueueConsumption(key);\n } else if (this.batchDebounce) {\n clearTimeout(this.scheduledBatchTimer);\n this.scheduleQueueConsumption(key);\n }\n\n // When amount of requests reaches `batchMax`, trigger the queue consumption without waiting on the `batchInterval`.\n if (this.queuedRequests.get(key)!.length === this.batchMax) {\n this.consumeQueue(key);\n }\n });\n }\n\n return requestCopy.observable;\n }\n\n // Consumes the queue.\n // Returns a list of promises (one for each query).\n public consumeQueue(\n key?: string,\n ): (Observable<FetchResult> | undefined)[] | undefined {\n const requestKey = key || '';\n const queuedRequests = this.queuedRequests.get(requestKey);\n\n if (!queuedRequests) {\n return;\n }\n\n this.queuedRequests.delete(requestKey);\n\n const requests: Operation[] = queuedRequests.map(\n queuedRequest => queuedRequest.operation,\n );\n\n const forwards: (NextLink | undefined)[] = queuedRequests.map(\n queuedRequest => queuedRequest.forward,\n );\n\n const observables: (Observable<FetchResult> | undefined)[] = [];\n const nexts: any[] = [];\n const errors: any[] = [];\n const completes: any[] = [];\n queuedRequests.forEach((batchableRequest, index) => {\n observables.push(batchableRequest.observable);\n nexts.push(batchableRequest.next);\n errors.push(batchableRequest.error);\n completes.push(batchableRequest.complete);\n });\n\n const batchedObservable =\n this.batchHandler(requests, forwards) || Observable.of();\n\n const onError = (error: any) => {\n //each callback list in batch\n errors.forEach(rejecters => {\n if (rejecters) {\n //each subscriber to request\n rejecters.forEach((e: any) => e(error));\n }\n });\n };\n\n batchedObservable.subscribe({\n next: results => {\n if (!Array.isArray(results)) {\n results = [results];\n }\n\n if (nexts.length !== results.length) {\n const error = new Error(\n `server returned results with length ${\n results.length\n }, expected length of ${nexts.length}`,\n );\n (error as any).result = results;\n\n return onError(error);\n }\n\n results.forEach((result, index) => {\n if (nexts[index]) {\n nexts[index].forEach((next: any) => next(result));\n }\n });\n },\n error: onError,\n complete: () => {\n completes.forEach(complete => {\n if (complete) {\n //each subscriber to request\n complete.forEach((c: any) => c());\n }\n });\n },\n });\n\n return observables;\n }\n\n private scheduleQueueConsumption(key?: string): void {\n const requestKey = key || '';\n this.scheduledBatchTimer = (setTimeout(() => {\n if (\n this.queuedRequests.get(requestKey) &&\n this.queuedRequests.get(requestKey)!.length\n ) {\n this.consumeQueue(requestKey);\n }\n }, this.batchInterval));\n }\n}\n"]}
1
+ {"version":3,"file":"batching.js","sourceRoot":"","sources":["../../../src/link/batch/batching.ts"],"names":[],"mappings":"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","sourcesContent":["import { FetchResult, NextLink, Operation } from '../core';\nimport { Observable, ObservableSubscription } from '../../utilities';\n\nexport type BatchHandler = (\n operations: Operation[],\n forward?: (NextLink | undefined)[],\n) => Observable<FetchResult[]> | null;\n\nexport interface BatchableRequest {\n operation: Operation;\n forward?: NextLink;\n}\n\ntype QueuedRequest = BatchableRequest & {\n observable?: Observable<FetchResult>;\n next: Array<(result: FetchResult) => void>;\n error: Array<(error: Error) => void>;\n complete: Array<() => void>;\n subscribers: Set<object>;\n}\n\n// Batches are primarily a Set<QueuedRequest>, but may have other optional\n// properties, such as batch.subscription.\ntype RequestBatch = Set<QueuedRequest> & {\n subscription?: ObservableSubscription;\n}\n\n// QueryBatcher doesn't fire requests immediately. Requests that were enqueued within\n// a certain amount of time (configurable through `batchInterval`) will be batched together\n// into one query.\nexport class OperationBatcher {\n // Queue on which the QueryBatcher will operate on a per-tick basis.\n private batchesByKey = new Map<string, RequestBatch>();\n\n private scheduledBatchTimer: ReturnType<typeof setTimeout>;\n private batchDebounce?: boolean;\n private batchInterval?: number;\n private batchMax: number;\n\n //This function is called to the queries in the queue to the server.\n private batchHandler: BatchHandler;\n private batchKey: (operation: Operation) => string;\n\n constructor({\n batchDebounce,\n batchInterval,\n batchMax,\n batchHandler,\n batchKey,\n }: {\n batchDebounce?: boolean;\n batchInterval?: number;\n batchMax?: number;\n batchHandler: BatchHandler;\n batchKey?: (operation: Operation) => string;\n }) {\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval;\n this.batchMax = batchMax || 0;\n this.batchHandler = batchHandler;\n this.batchKey = batchKey || (() => '');\n }\n\n public enqueueRequest(request: BatchableRequest): Observable<FetchResult> {\n const requestCopy: QueuedRequest = {\n ...request,\n next: [],\n error: [],\n complete: [],\n subscribers: new Set(),\n };\n\n const key = this.batchKey(request.operation);\n\n if (!requestCopy.observable) {\n requestCopy.observable = new Observable<FetchResult>(observer => {\n let batch = this.batchesByKey.get(key)!;\n if (!batch) this.batchesByKey.set(key, batch = new Set());\n\n // These booleans seem to me (@benjamn) like they might always be the\n // same (and thus we could do with only one of them), but I'm not 100%\n // sure about that.\n const isFirstEnqueuedRequest = batch.size === 0;\n const isFirstSubscriber = requestCopy.subscribers.size === 0;\n requestCopy.subscribers.add(observer);\n if (isFirstSubscriber) {\n batch.add(requestCopy);\n }\n\n // called for each subscriber, so need to save all listeners (next, error, complete)\n if (observer.next) {\n requestCopy.next.push(observer.next.bind(observer));\n }\n\n if (observer.error) {\n requestCopy.error.push(observer.error.bind(observer));\n }\n\n if (observer.complete) {\n requestCopy.complete.push(observer.complete.bind(observer));\n }\n\n // The first enqueued request triggers the queue consumption after `batchInterval` milliseconds.\n if (isFirstEnqueuedRequest) {\n this.scheduleQueueConsumption(key);\n } else if (this.batchDebounce) {\n clearTimeout(this.scheduledBatchTimer);\n this.scheduleQueueConsumption(key);\n }\n\n // When amount of requests reaches `batchMax`, trigger the queue consumption without waiting on the `batchInterval`.\n if (batch.size === this.batchMax) {\n this.consumeQueue(key);\n }\n\n return () => {\n // If this is last subscriber for this request, remove request from queue\n if (requestCopy.subscribers.delete(observer) &&\n requestCopy.subscribers.size < 1) {\n // If this is last request from queue, remove queue entirely\n if (batch.delete(requestCopy) && batch.size < 1) {\n this.consumeQueue(key);\n // If queue was in flight, cancel it\n batch.subscription?.unsubscribe();\n }\n }\n }\n });\n }\n\n return requestCopy.observable;\n }\n\n // Consumes the queue.\n // Returns a list of promises (one for each query).\n public consumeQueue(\n key: string = '',\n ): (Observable<FetchResult> | undefined)[] | undefined {\n const batch = this.batchesByKey.get(key);\n // Delete this batch and process it below.\n this.batchesByKey.delete(key);\n if (!batch || !batch.size) {\n // No requests to be processed.\n return;\n }\n\n const operations: QueuedRequest['operation'][] = [];\n const forwards: QueuedRequest['forward'][] = [];\n const observables: QueuedRequest['observable'][] = [];\n const nexts: QueuedRequest['next'][] = [];\n const errors: QueuedRequest['error'][] = [];\n const completes: QueuedRequest['complete'][] = [];\n\n // Even though batch is a Set, it preserves the order of first insertion\n // when iterating (per ECMAScript specification), so these requests will be\n // handled in the order they were enqueued (minus any deleted ones).\n batch.forEach(request => {\n operations.push(request.operation);\n forwards.push(request.forward);\n observables.push(request.observable);\n nexts.push(request.next);\n errors.push(request.error);\n completes.push(request.complete);\n });\n\n const batchedObservable =\n this.batchHandler(operations, forwards) || Observable.of();\n\n const onError = (error: Error) => {\n //each callback list in batch\n errors.forEach(rejecters => {\n if (rejecters) {\n //each subscriber to request\n rejecters.forEach((e) => e(error));\n }\n });\n };\n\n batch.subscription = batchedObservable.subscribe({\n next: results => {\n if (!Array.isArray(results)) {\n results = [results];\n }\n\n if (nexts.length !== results.length) {\n const error = new Error(\n `server returned results with length ${\n results.length\n }, expected length of ${nexts.length}`,\n );\n (error as any).result = results;\n\n return onError(error);\n }\n\n results.forEach((result, index) => {\n if (nexts[index]) {\n nexts[index].forEach((next) => next(result));\n }\n });\n },\n error: onError,\n complete: () => {\n completes.forEach(complete => {\n if (complete) {\n //each subscriber to request\n complete.forEach((c) => c());\n }\n });\n },\n });\n\n return observables;\n }\n\n private scheduleQueueConsumption(key: string): void {\n this.scheduledBatchTimer = setTimeout(() => {\n this.consumeQueue(key);\n }, this.batchInterval);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/client",
3
- "version": "3.7.0-beta.2",
3
+ "version": "3.7.0-beta.3",
4
4
  "description": "A fully-featured caching GraphQL client.",
5
5
  "private": false,
6
6
  "keywords": [
@@ -65,6 +65,7 @@
65
65
  "@rollup/plugin-node-resolve": "11.2.1",
66
66
  "@testing-library/react": "12.1.5",
67
67
  "@testing-library/react-hooks": "8.0.0",
68
+ "@testing-library/user-event": "^14.2.0",
68
69
  "@types/fast-json-stable-stringify": "2.0.0",
69
70
  "@types/fetch-mock": "7.3.5",
70
71
  "@types/glob": "7.2.0",
package/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export var version = '3.7.0-beta.2';
1
+ export var version = '3.7.0-beta.3';
2
2
  //# sourceMappingURL=version.js.map