UNPKG

@splitsoftware/splitio-commons

Version:
73 lines (72 loc) 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromObjectSyncTaskFactory = exports.fromObjectUpdaterFactory = void 0; var lang_1 = require("../../../utils/lang"); var syncTask_1 = require("../../syncTask"); var constants_1 = require("../../../utils/constants"); var constants_2 = require("../../../readiness/constants"); var constants_3 = require("../../../logger/constants"); /** * Offline equivalent of `splitChangesUpdaterFactory` */ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) { var log = settings.log, definitions = storage.definitions; var startingUp = true; return function objectUpdater() { var splits = []; var loadError = null; var splitsMock = {}; try { splitsMock = splitsParser(settings); } catch (err) { loadError = err; log.error(constants_3.ERROR_SYNC_OFFLINE_LOADING, [err]); } if (!loadError && splitsMock) { log.debug(constants_3.SYNC_OFFLINE_DATA, [JSON.stringify(splitsMock)]); (0, lang_1.forOwn)(splitsMock, function (val, name) { // @ts-ignore Split changeNumber and seed is undefined in localhost mode splits.push({ name: name, status: 'ACTIVE', killed: false, trafficAllocation: 100, defaultTreatment: constants_1.CONTROL, conditions: val.conditions || [], configurations: val.configurations, trafficTypeName: val.trafficTypeName }); }); return Promise.all([ definitions.clear(), definitions.update(splits, [], Date.now()) ]).then(function () { readiness.definitions.emit(constants_2.SDK_DEFINITIONS_ARRIVED, { type: constants_2.FLAGS_UPDATE, names: [] }); if (startingUp) { startingUp = false; Promise.resolve(storage.validateCache ? storage.validateCache() : { initialCacheLoad: true /* Fallback: assume initial load when validateCache doesn't exist */ }).then(function (cacheMetadata) { // Emits SDK_READY_FROM_CACHE if (!cacheMetadata.initialCacheLoad) { readiness.definitions.emit(constants_2.SDK_DEFINITIONS_CACHE_LOADED, cacheMetadata); } // Emits SDK_READY readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED, { type: constants_2.SEGMENTS_UPDATE, names: [] }); }); } return true; }); } else { return Promise.resolve(true); } }; } exports.fromObjectUpdaterFactory = fromObjectUpdaterFactory; /** * PollingManager in Offline mode */ function fromObjectSyncTaskFactory(splitsParser, storage, readiness, settings) { return (0, syncTask_1.syncTaskFactory)(settings.log, fromObjectUpdaterFactory(splitsParser, storage, readiness, settings), settings.scheduler.offlineRefreshRate, 'offlineUpdater'); } exports.fromObjectSyncTaskFactory = fromObjectSyncTaskFactory;