UNPKG

@splitsoftware/splitio-commons

Version:
53 lines (52 loc) 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.syncManagerOfflineFactory = void 0; var fromObjectSyncTask_1 = require("./syncTasks/fromObjectSyncTask"); var objectAssign_1 = require("../../utils/lang/objectAssign"); var constants_1 = require("../../readiness/constants"); function flush() { return Promise.resolve(); } /** * Offline SyncManager factory. * Can be used for server-side API, and client-side API with or without multiple clients. * * @param splitsParser - e.g., `splitsParserFromFile`, `splitsParserFromSettings`. */ function syncManagerOfflineFactory(splitsParserFactory) { /** * SyncManager factory for modular SDK */ return function (_a) { var settings = _a.settings, readiness = _a.readiness, storage = _a.storage; var mainSyncManager = (0, fromObjectSyncTask_1.fromObjectSyncTaskFactory)(splitsParserFactory(), storage, readiness, settings); var mainStart = mainSyncManager.start; var sharedStarts = []; return (0, objectAssign_1.objectAssign)(mainSyncManager, { start: function () { mainStart(); sharedStarts.forEach(function (cb) { return cb(); }); sharedStarts.length = 0; }, // fake flush, that resolves immediately flush: flush, // [Only used for client-side] shared: function (matchingKey, readinessManager) { // In LOCALHOST mode, shared clients are ready in the next event-loop cycle than created // SDK_READY cannot be emitted directly because this will not update the readiness status function emitSdkReady() { readinessManager.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED); // SDK_SPLITS_ARRIVED emitted by main SyncManager } if (mainSyncManager.isRunning()) setTimeout(emitSdkReady); else sharedStarts.push(emitSdkReady); return { stop: function () { }, flush: flush, }; } }); }; } exports.syncManagerOfflineFactory = syncManagerOfflineFactory;