@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
53 lines (52 loc) • 2.25 kB
JavaScript
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;
;