Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 2f3e7c4

Browse files
committed
made react native entry point independent of browser entry
1 parent f3df4a1 commit 2f3e7c4

File tree

2 files changed

+101
-12
lines changed

2 files changed

+101
-12
lines changed

packages/optimizely-sdk/lib/index.react_native.js

Lines changed: 86 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,34 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
var Logger = require('./plugins/logger/index.react_native');
17-
var browserIndex = require('./index.browser');
16+
var logging = require('@optimizely/js-sdk-logging');
17+
var fns = require('./utils/fns');
18+
var configValidator = require('./utils/config_validator');
19+
var defaultErrorHandler = require('./plugins/error_handler');
20+
var defaultEventDispatcher = require('./plugins/event_dispatcher/index.browser');
21+
var enums = require('./utils/enums');
22+
var loggerPlugin = require('./plugins/logger/index.react_native');
23+
var Optimizely = require('./optimizely');
24+
var eventProcessorConfigValidator = require('./utils/event_processor_config_validator');
25+
26+
var logger = logging.getLogger();
27+
logging.setLogHandler(loggerPlugin.createLogger());
28+
logging.setLogLevel(logging.LogLevel.INFO);
29+
30+
var DEFAULT_EVENT_BATCH_SIZE = 10;
31+
var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s
1832

1933
/**
20-
* Entry point into the Optimizely Browser SDK for React Native Apps
34+
* Entry point into the Optimizely Javascript SDK for React Native
2135
*/
2236
module.exports = {
23-
...browserIndex,
37+
logging: loggerPlugin,
38+
errorHandler: defaultErrorHandler,
39+
eventDispatcher: defaultEventDispatcher,
40+
enums: enums,
41+
42+
setLogger: logging.setLogHandler,
43+
setLogLevel: logging.setLogLevel,
2444

2545
/**
2646
* Creates an instance of the Optimizely class
@@ -36,9 +56,66 @@ module.exports = {
3656
* @return {Object} the Optimizely object
3757
*/
3858
createInstance: function(config) {
39-
return browserIndex.createInstance({
40-
logger: new Logger(),
41-
...config,
42-
})
43-
}
59+
try {
60+
config = config || {};
61+
62+
// TODO warn about setting per instance errorHandler / logger / logLevel
63+
if (config.errorHandler) {
64+
logging.setErrorHandler(config.errorHandler);
65+
}
66+
if (config.logger) {
67+
logging.setLogHandler(config.logger);
68+
// respect the logger's shouldLog functionality
69+
logging.setLogLevel(logging.LogLevel.NOTSET);
70+
}
71+
if (config.logLevel !== undefined) {
72+
logging.setLogLevel(config.logLevel);
73+
}
74+
75+
try {
76+
configValidator.validate(config);
77+
config.isValidInstance = true;
78+
} catch (ex) {
79+
logger.error(ex);
80+
config.isValidInstance = false;
81+
}
82+
83+
// Explicitly check for null or undefined
84+
// prettier-ignore
85+
if (config.skipJSONValidation == null) { // eslint-disable-line eqeqeq
86+
config.skipJSONValidation = true;
87+
}
88+
89+
config = fns.assignIn(
90+
{
91+
clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE,
92+
eventBatchSize: DEFAULT_EVENT_BATCH_SIZE,
93+
eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL,
94+
},
95+
config,
96+
{
97+
eventDispatcher: config.eventDispatcher,
98+
// always get the OptimizelyLogger facade from logging
99+
logger: logger,
100+
errorHandler: logging.getErrorHandler(),
101+
}
102+
);
103+
104+
if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) {
105+
logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE);
106+
config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE;
107+
}
108+
if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) {
109+
logger.warn('Invalid eventFlushInterval %s, defaulting to %s', config.eventFlushInterval, DEFAULT_EVENT_FLUSH_INTERVAL);
110+
config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL;
111+
}
112+
113+
var optimizely = new Optimizely(config);
114+
115+
return optimizely;
116+
} catch (e) {
117+
logger.error(e);
118+
return null;
119+
}
120+
},
44121
};

packages/optimizely-sdk/lib/plugins/logger/index.react_native.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,29 @@ function getLogLevelName(level) {
1010
}
1111
}
1212

13-
export default class ReactNativeLogger {
13+
class ReactNativeLogger {
1414
log(level, message) {
1515
const formattedMessage = `[OPTIMIZELY] - ${getLogLevelName(level)} ${new Date().toISOString()} ${message}`;
1616
switch (level) {
1717
case LogLevel.INFO: console.info(formattedMessage); break;
18-
case LogLevel.ERROR:
18+
case LogLevel.ERROR:
1919
case LogLevel.WARNING: console.warn(formattedMessage); break;
2020
case LogLevel.DEBUG:
2121
case LogLevel.NOTSET: console.log(formattedMessage); break;
2222
}
2323
}
2424
}
2525

26-
module.exports = ReactNativeLogger;
26+
function NoOpLogger() {}
27+
28+
NoOpLogger.prototype.log = function() {};
29+
30+
module.exports = {
31+
createLogger: function() {
32+
return new ReactNativeLogger();
33+
},
34+
35+
createNoOpLogger: function() {
36+
return new NoOpLogger();
37+
},
38+
};

0 commit comments

Comments
 (0)