-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathnode.js
More file actions
91 lines (74 loc) · 3.42 KB
/
Copy pathnode.js
File metadata and controls
91 lines (74 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { splitApiFactory } from '@splitsoftware/splitio-commons/src/services/splitApi';
import { syncManagerOnlineFactory } from '@splitsoftware/splitio-commons/src/sync/syncManagerOnline';
import { pushManagerFactory } from '@splitsoftware/splitio-commons/src/sync/streaming/pushManager';
import { pollingManagerSSFactory } from '@splitsoftware/splitio-commons/src/sync/polling/pollingManagerSS';
import { InRedisStorage } from '@splitsoftware/splitio-commons/src/storages/inRedis';
import { InMemoryStorageFactory } from '@splitsoftware/splitio-commons/src/storages/inMemory/InMemoryStorage';
import { getRolloutPlan } from '@splitsoftware/splitio-commons/src/storages/getRolloutPlan';
import { sdkManagerFactory } from '@splitsoftware/splitio-commons/src/sdkManager';
import { sdkClientMethodFactory } from '@splitsoftware/splitio-commons/src/sdkClient/sdkClientMethod';
import { impressionObserverSSFactory } from '@splitsoftware/splitio-commons/src/trackers/impressionObserver/impressionObserverSS';
import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory';
import { CONSUMER_MODE, LOCALHOST_MODE } from '@splitsoftware/splitio-commons/src/utils/constants';
import { isConsumerMode } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/mode';
import { localhostFromFileFactory } from '../sync/offline/LocalhostFromFile';
import { settingsFactory } from '../settings/node';
import { platform } from '../platform';
import { bloomFilterFactory } from '@splitsoftware/splitio-commons/src/utils/filter/bloomFilter';
const syncManagerOnlineSSFactory = syncManagerOnlineFactory(pollingManagerSSFactory, pushManagerFactory);
function getStorage(settings) {
return settings.storage.type === 'REDIS' ?
InRedisStorage(settings.storage) :
InMemoryStorageFactory;
}
/**
*
* @param {import("@splitsoftware/splitio-commons/types/types").ISettings} settings
*/
function getModules(settings) {
const modules = {
settings,
platform,
storageFactory: getStorage(settings),
splitApiFactory,
syncManagerFactory: syncManagerOnlineSSFactory,
sdkManagerFactory,
sdkClientMethodFactory,
impressionsObserverFactory: impressionObserverSSFactory,
filterAdapterFactory: bloomFilterFactory,
extraProps: (params) => {
if (!isConsumerMode(params.settings.mode)) {
return {
getRolloutPlan(options) {
return getRolloutPlan(params.settings.log, params.storage, options);
}
};
}
}
};
switch (settings.mode) {
case LOCALHOST_MODE:
modules.splitApiFactory = undefined;
modules.syncManagerFactory = localhostFromFileFactory;
modules.SignalListener = undefined;
break;
case 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.
*/
export function SplitFactory(config, __updateModules) {
const settings = settingsFactory(config);
const modules = getModules(settings);
if (__updateModules) __updateModules(modules);
return sdkFactory(modules);
}