UNPKG

@splitsoftware/splitio-commons

Version:
78 lines (77 loc) 3.46 kB
/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable no-unused-vars */ import { isNaNNumber } from '../../utils/lang'; import { LOG_PREFIX } from './constants'; /** * ISegmentsCacheAsync implementation for pluggable storages. */ var SegmentsCachePluggable = /** @class */ (function () { function SegmentsCachePluggable(log, keys, wrapper) { this.log = log; this.keys = keys; this.wrapper = wrapper; } /** * Update the given segment `name` with the lists of `addedKeys`, `removedKeys` and `changeNumber`. * The returned promise is resolved if the operation success, with `true` if the segment was updated (i.e., some key was added or removed), * or rejected if it fails (e.g., wrapper operation fails). */ SegmentsCachePluggable.prototype.update = function (name, addedKeys, removedKeys, changeNumber) { var segmentKey = this.keys.buildSegmentNameKey(name); return Promise.all([ addedKeys.length && this.wrapper.addItems(segmentKey, addedKeys), removedKeys.length && this.wrapper.removeItems(segmentKey, removedKeys), this.wrapper.set(this.keys.buildSegmentTillKey(name), changeNumber + '') ]).then(function () { return addedKeys.length > 0 || removedKeys.length > 0; }); }; /** * Returns a promise that resolves with a boolean value indicating if `key` is part of `name` segment. * Promise can be rejected if wrapper operation fails. */ SegmentsCachePluggable.prototype.isInSegment = function (name, key) { return this.wrapper.itemContains(this.keys.buildSegmentNameKey(name), key); }; /** * Get till number or -1 if it's not defined. * The returned promise is resolved with the changeNumber or -1 if it doesn't exist or a wrapper operation fails. * The promise will never be rejected. */ SegmentsCachePluggable.prototype.getChangeNumber = function (name) { var _this = this; return this.wrapper.get(this.keys.buildSegmentTillKey(name)).then(function (value) { var i = parseInt(value, 10); return isNaNNumber(i) ? undefined : i; }).catch(function (e) { _this.log.error(LOG_PREFIX + 'Could not retrieve changeNumber from segments storage. Error: ' + e); return undefined; }); }; /** * Add the given segment names to the set of registered segments. * The returned promise is resolved when the operation success, * or rejected if it fails (e.g., wrapper operation fails). */ SegmentsCachePluggable.prototype.registerSegments = function (segments) { if (segments.length) { return this.wrapper.addItems(this.keys.buildRegisteredSegmentsKey(), segments); } else { return Promise.resolve(); } }; /** * Returns a promise that resolves with the set of registered segments in a list, * or rejected if it fails (e.g., wrapper operation fails). */ SegmentsCachePluggable.prototype.getRegisteredSegments = function () { return this.wrapper.getItems(this.keys.buildRegisteredSegmentsKey()); }; // @TODO implement if required by DataLoader or Producer mode SegmentsCachePluggable.prototype.clear = function () { return Promise.resolve(true); }; return SegmentsCachePluggable; }()); export { SegmentsCachePluggable };