@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
35 lines (34 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.segmentChangesFetcherFactory = void 0;
var tslib_1 = require("tslib");
function greedyFetch(fetchSegmentChanges, since, segmentName, noCache, targetTill) {
return fetchSegmentChanges(since, segmentName, noCache, targetTill)
.then(function (resp) { return resp.json(); })
.then(function (json) {
var since = json.since, till = json.till;
if (since === till) {
return [json];
}
else {
return Promise.all([json, greedyFetch(fetchSegmentChanges, till, segmentName, noCache, targetTill)]).then(function (flatMe) {
return (0, tslib_1.__spreadArray)([flatMe[0]], flatMe[1], true);
});
}
});
}
/**
* Factory of SegmentChanges fetcher.
* SegmentChanges fetcher is a wrapper around `segmentChanges` API service that parses the response and handle errors and retries.
*/
function segmentChangesFetcherFactory(fetchSegmentChanges) {
return function segmentChangesFetcher(since, segmentName, noCache, till,
// Optional decorator for `fetchSegmentChanges` promise, such as timeout or time tracker
decorator) {
var segmentsPromise = greedyFetch(fetchSegmentChanges, since, segmentName, noCache, till);
if (decorator)
segmentsPromise = decorator(segmentsPromise);
return segmentsPromise;
};
}
exports.segmentChangesFetcherFactory = segmentChangesFetcherFactory;