@splitsoftware/splitio
Version:
70 lines (69 loc) • 3.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SplitFactory = void 0;
var splitApi_1 = require("@splitsoftware/splitio-commons/cjs/services/splitApi");
var syncManagerOnline_1 = require("@splitsoftware/splitio-commons/cjs/sync/syncManagerOnline");
var pushManager_1 = require("@splitsoftware/splitio-commons/cjs/sync/streaming/pushManager");
var pollingManagerSS_1 = require("@splitsoftware/splitio-commons/cjs/sync/polling/pollingManagerSS");
var inRedis_1 = require("@splitsoftware/splitio-commons/cjs/storages/inRedis");
var InMemoryStorage_1 = require("@splitsoftware/splitio-commons/cjs/storages/inMemory/InMemoryStorage");
var sdkManager_1 = require("@splitsoftware/splitio-commons/cjs/sdkManager");
var sdkClientMethod_1 = require("@splitsoftware/splitio-commons/cjs/sdkClient/sdkClientMethod");
var impressionObserverSS_1 = require("@splitsoftware/splitio-commons/cjs/trackers/impressionObserver/impressionObserverSS");
var sdkFactory_1 = require("@splitsoftware/splitio-commons/cjs/sdkFactory");
var constants_1 = require("@splitsoftware/splitio-commons/cjs/utils/constants");
var LocalhostFromFile_1 = require("../sync/offline/LocalhostFromFile");
var node_1 = require("../settings/node");
var platform_1 = require("../platform");
var bloomFilter_1 = require("../platform/filter/bloomFilter");
var syncManagerOnlineSSFactory = (0, syncManagerOnline_1.syncManagerOnlineFactory)(pollingManagerSS_1.pollingManagerSSFactory, pushManager_1.pushManagerFactory);
function getStorage(settings) {
return settings.storage.type === 'REDIS' ?
(0, inRedis_1.InRedisStorage)(settings.storage) :
InMemoryStorage_1.InMemoryStorageFactory;
}
/**
*
* @param {import("@splitsoftware/splitio-commons/types/types").ISettings} settings
*/
function getModules(settings) {
var modules = {
settings: settings,
platform: platform_1.platform,
storageFactory: getStorage(settings),
splitApiFactory: splitApi_1.splitApiFactory,
syncManagerFactory: syncManagerOnlineSSFactory,
sdkManagerFactory: sdkManager_1.sdkManagerFactory,
sdkClientMethodFactory: sdkClientMethod_1.sdkClientMethodFactory,
SignalListener: platform_1.SignalListener,
impressionsObserverFactory: impressionObserverSS_1.impressionObserverSSFactory,
filterAdapterFactory: bloomFilter_1.bloomFilterFactory
};
switch (settings.mode) {
case constants_1.LOCALHOST_MODE:
modules.splitApiFactory = undefined;
modules.syncManagerFactory = LocalhostFromFile_1.localhostFromFileFactory;
modules.SignalListener = undefined;
break;
case constants_1.CONSUMER_MODE:
modules.syncManagerFactory = undefined;
break;
}
return modules;
}
/**
* SplitFactory for server-side.
*
* @param {SplitIO.INodeSettings | SplitIO.INodeAsyncSettings} config configuration object used to instantiate the SDK
* @param {Function=} __updateModules optional function that lets redefine internal SDK modules. Use with
* caution since, unlike `config`, this param is not validated neither considered part of the public API.
* @throws Will throw an error if the provided config is invalid.
*/
function SplitFactory(config, __updateModules) {
var settings = (0, node_1.settingsFactory)(config);
var modules = getModules(settings);
if (__updateModules)
__updateModules(modules);
return (0, sdkFactory_1.sdkFactory)(modules);
}
exports.SplitFactory = SplitFactory;