@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
49 lines (48 loc) • 2.03 kB
JavaScript
import { fromObjectSyncTaskFactory } from './syncTasks/fromObjectSyncTask';
import { objectAssign } from '../../utils/lang/objectAssign';
import { SDK_SEGMENTS_ARRIVED } from '../../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`.
*/
export function syncManagerOfflineFactory(splitsParserFactory) {
/**
* SyncManager factory for modular SDK
*/
return function (_a) {
var settings = _a.settings, readiness = _a.readiness, storage = _a.storage;
var mainSyncManager = fromObjectSyncTaskFactory(splitsParserFactory(), storage, readiness, settings);
var mainStart = mainSyncManager.start;
var sharedStarts = [];
return 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(SDK_SEGMENTS_ARRIVED); // SDK_SPLITS_ARRIVED emitted by main SyncManager
}
if (mainSyncManager.isRunning())
setTimeout(emitSdkReady);
else
sharedStarts.push(emitSdkReady);
return {
stop: function () { },
flush: flush,
};
}
});
};
}