@@ -7,7 +7,7 @@ import 'package:web/web.dart';
77
88extension on Window {
99 @JS ()
10- external JS_BrowserSDKPackage ? splitio;
10+ external JSBrowserSDKPackage ? splitio;
1111}
1212
1313/// Web implementation of [SplitioPlatform] .
@@ -20,13 +20,13 @@ class SplitioWeb extends SplitioPlatform {
2020 // Future to queue method calls until SDK is initialized
2121 Future <void >? _initFuture;
2222
23- late JS_IBrowserSDK _factory;
23+ late JSIBrowserSDK _factory;
2424 String ? _trafficType;
2525 // Broadcast to allow users to subscribe multiple listeners
2626 final StreamController <Impression > _impressionsStreamController =
2727 StreamController <Impression >.broadcast ();
2828
29- final Map <String , JS_IBrowserClient > _clients = {};
29+ final Map <String , JSIBrowserClient > _clients = {};
3030
3131 @override
3232 Future <void > init ({
@@ -35,14 +35,11 @@ class SplitioWeb extends SplitioPlatform {
3535 required String ? bucketingKey,
3636 SplitConfiguration ? sdkConfiguration,
3737 }) {
38- if (_initFuture == null ) {
39- _initFuture = this ._init (
40- apiKey: apiKey,
41- matchingKey: matchingKey,
42- bucketingKey: bucketingKey,
43- sdkConfiguration: sdkConfiguration);
44- }
45- return _initFuture! ;
38+ return _initFuture ?? = _init (
39+ apiKey: apiKey,
40+ matchingKey: matchingKey,
41+ bucketingKey: bucketingKey,
42+ sdkConfiguration: sdkConfiguration);
4643 }
4744
4845 Future <void > _init ({
@@ -57,11 +54,11 @@ class SplitioWeb extends SplitioPlatform {
5754 _buildConfig (apiKey, matchingKey, bucketingKey, sdkConfiguration);
5855
5956 // Create factory instance
60- this . _factory = window.splitio! .SplitFactory (config);
57+ _factory = window.splitio! .SplitFactory (config);
6158
6259 if (sdkConfiguration != null ) {
6360 if (sdkConfiguration.configurationMap['trafficType' ] is String ) {
64- this . _trafficType = sdkConfiguration.configurationMap['trafficType' ];
61+ _trafficType = sdkConfiguration.configurationMap['trafficType' ];
6562 }
6663
6764 // Log warnings regarding unsupported configs. Not done in _buildConfig to reuse the factory logger
@@ -73,7 +70,7 @@ class SplitioWeb extends SplitioPlatform {
7370 ];
7471 for (final configName in unsupportedConfigs) {
7572 if (sdkConfiguration.configurationMap[configName] != null ) {
76- this . _factory.settings.log.warn (
73+ _factory.settings.log.warn (
7774 'Config $configName is not supported by the Web package. This config will be ignored.'
7875 .toJS);
7976 }
@@ -118,54 +115,65 @@ class SplitioWeb extends SplitioPlatform {
118115 }
119116
120117 // Map SplitConfiguration to JS equivalent object
121- JS_Configuration _buildConfig (String apiKey, String matchingKey,
118+ JSConfiguration _buildConfig (String apiKey, String matchingKey,
122119 String ? bucketingKey, SplitConfiguration ? configuration) {
123- final config = JSObject () as JS_Configuration ;
120+ final config = JSObject () as JSConfiguration ;
124121
125- final core = JSObject () as JS_ConfigurationCore ;
122+ final core = JSObject () as JSConfigurationCore ;
126123 core.authorizationKey = apiKey.toJS;
127124 core.key = buildJsKey (matchingKey, bucketingKey);
128125 config.core = core;
129126
130127 if (configuration != null ) {
131- final scheduler = JSObject () as JS_ConfigurationScheduler ;
132- if (configuration.configurationMap.containsKey ('featuresRefreshRate' ))
128+ final scheduler = JSObject () as JSConfigurationScheduler ;
129+ if (configuration.configurationMap.containsKey ('featuresRefreshRate' )) {
133130 scheduler.featuresRefreshRate =
134131 (configuration.configurationMap['featuresRefreshRate' ] as int ).toJS;
135- if (configuration.configurationMap.containsKey ('segmentsRefreshRate' ))
132+ }
133+ if (configuration.configurationMap.containsKey ('segmentsRefreshRate' )) {
136134 scheduler.segmentsRefreshRate =
137135 (configuration.configurationMap['segmentsRefreshRate' ] as int ).toJS;
138- if (configuration.configurationMap.containsKey ('impressionsRefreshRate' ))
136+ }
137+ if (configuration.configurationMap
138+ .containsKey ('impressionsRefreshRate' )) {
139139 scheduler.impressionsRefreshRate =
140140 (configuration.configurationMap['impressionsRefreshRate' ] as int )
141141 .toJS;
142- if (configuration.configurationMap.containsKey ('telemetryRefreshRate' ))
142+ }
143+ if (configuration.configurationMap.containsKey ('telemetryRefreshRate' )) {
143144 scheduler.telemetryRefreshRate =
144145 (configuration.configurationMap['telemetryRefreshRate' ] as int )
145146 .toJS;
146- if (configuration.configurationMap.containsKey ('eventsQueueSize' ))
147+ }
148+ if (configuration.configurationMap.containsKey ('eventsQueueSize' )) {
147149 scheduler.eventsQueueSize =
148150 (configuration.configurationMap['eventsQueueSize' ] as int ).toJS;
149- if (configuration.configurationMap.containsKey ('impressionsQueueSize' ))
151+ }
152+ if (configuration.configurationMap.containsKey ('impressionsQueueSize' )) {
150153 scheduler.impressionsQueueSize =
151154 (configuration.configurationMap['impressionsQueueSize' ] as int )
152155 .toJS;
153- if (configuration.configurationMap.containsKey ('eventFlushInterval' ))
156+ }
157+ if (configuration.configurationMap.containsKey ('eventFlushInterval' )) {
154158 scheduler.eventsPushRate =
155159 (configuration.configurationMap['eventFlushInterval' ] as int ).toJS;
160+ }
156161 config.scheduler = scheduler;
157162
158- if (configuration.configurationMap.containsKey ('streamingEnabled' ))
163+ if (configuration.configurationMap.containsKey ('streamingEnabled' )) {
159164 config.streamingEnabled =
160165 (configuration.configurationMap['streamingEnabled' ] as bool ).toJS;
166+ }
161167
162- final urls = JSObject () as JS_ConfigurationUrls ;
163- if (configuration.configurationMap.containsKey ('sdkEndpoint' ))
168+ final urls = JSObject () as JSConfigurationUrls ;
169+ if (configuration.configurationMap.containsKey ('sdkEndpoint' )) {
164170 urls.sdk =
165171 (configuration.configurationMap['sdkEndpoint' ] as String ).toJS;
166- if (configuration.configurationMap.containsKey ('eventsEndpoint' ))
172+ }
173+ if (configuration.configurationMap.containsKey ('eventsEndpoint' )) {
167174 urls.events =
168175 (configuration.configurationMap['eventsEndpoint' ] as String ).toJS;
176+ }
169177
170178 // Convert urls for consistency between Browser SDK and Android/iOS SDK
171179 if (configuration.configurationMap.containsKey ('authServiceEndpoint' )) {
@@ -195,7 +203,7 @@ class SplitioWeb extends SplitioPlatform {
195203 }
196204 config.urls = urls;
197205
198- final sync = JSObject () as JS_ConfigurationSync ;
206+ final sync = JSObject () as JSConfigurationSync ;
199207 if (configuration.configurationMap['impressionsMode' ] != null ) {
200208 sync .impressionsMode =
201209 (configuration.configurationMap['impressionsMode' ] as String )
@@ -230,7 +238,7 @@ class SplitioWeb extends SplitioPlatform {
230238 splitFilters.add (
231239 {'type' : 'bySet' , 'values' : syncConfig['syncConfigFlagSets' ]});
232240 }
233- sync .splitFilters = splitFilters.jsify () as JSArray <JS_SplitFilter >;
241+ sync .splitFilters = splitFilters.jsify () as JSArray <JSSplitFilter >;
234242 }
235243 config.sync = sync ;
236244
@@ -275,13 +283,13 @@ class SplitioWeb extends SplitioPlatform {
275283 }
276284
277285 if (configuration.configurationMap['readyTimeout' ] != null ) {
278- final startup = JSObject () as JS_ConfigurationStartup ;
286+ final startup = JSObject () as JSConfigurationStartup ;
279287 startup.readyTimeout =
280288 (configuration.configurationMap['readyTimeout' ] as int ).toJS;
281289 config.startup = startup;
282290 }
283291
284- final storageOptions = JSObject () as JS_ConfigurationStorage ;
292+ final storageOptions = JSObject () as JSConfigurationStorage ;
285293 storageOptions.type = 'LOCALSTORAGE' .toJS;
286294 if (configuration.configurationMap['rolloutCacheConfiguration' ] != null ) {
287295 final rolloutCacheConfiguration =
@@ -304,11 +312,11 @@ class SplitioWeb extends SplitioPlatform {
304312 }
305313
306314 if (configuration.configurationMap['impressionListener' ] is bool ) {
307- final JSFunction logImpression = ((JS_ImpressionData data) {
315+ final JSFunction logImpression = ((JSImpressionData data) {
308316 _impressionsStreamController.add (jsImpressionDataToImpression (data));
309317 }).toJS;
310318
311- final impressionListener = JSObject () as JS_IImpressionListener ;
319+ final impressionListener = JSObject () as JSImpressionListener ;
312320 reflectSet (impressionListener, 'logImpression' .toJS, logImpression);
313321
314322 config.impressionListener = impressionListener;
@@ -326,20 +334,20 @@ class SplitioWeb extends SplitioPlatform {
326334 await _getClient (matchingKey: matchingKey, bucketingKey: bucketingKey);
327335 }
328336
329- Future <JS_IBrowserClient > _getClient ({
337+ Future <JSIBrowserClient > _getClient ({
330338 required String matchingKey,
331339 required String ? bucketingKey,
332340 }) async {
333- await this . _initFuture;
341+ await _initFuture;
334342
335343 final key = buildKeyString (matchingKey, bucketingKey);
336344
337345 return (_clients[key] ?? =
338346 _factory.client (buildJsKey (matchingKey, bucketingKey)));
339347 }
340348
341- Future <JS_IManager > _getManager () async {
342- await this . _initFuture;
349+ Future <JSIManager > _getManager () async {
350+ await _initFuture;
343351
344352 return _factory.manager ();
345353 }
@@ -367,7 +375,7 @@ class SplitioWeb extends SplitioPlatform {
367375 if (jsValue != null ) {
368376 reflectSet (jsMap, key.toJS, jsValue);
369377 } else {
370- this . _factory.settings.log.warn (
378+ _factory.settings.log.warn (
371379 'Invalid ${isAttribute ? 'attribute' : 'property' } value: $value , for key: $key , will be ignored'
372380 .toJS);
373381 }
@@ -376,9 +384,9 @@ class SplitioWeb extends SplitioPlatform {
376384 return jsMap;
377385 }
378386
379- JS_EvaluationOptions _convertEvaluationOptions (
387+ JSEvaluationOptions _convertEvaluationOptions (
380388 EvaluationOptions evaluationOptions) {
381- final jsEvalOptions = JSObject () as JS_EvaluationOptions ;
389+ final jsEvalOptions = JSObject () as JSEvaluationOptions ;
382390
383391 if (evaluationOptions.properties.isNotEmpty) {
384392 jsEvalOptions.properties =
@@ -570,13 +578,9 @@ class SplitioWeb extends SplitioPlatform {
570578 );
571579
572580 final result = client.track (
573- trafficType != null
574- ? trafficType.toJS
575- : this ._trafficType != null
576- ? this ._trafficType! .toJS
577- : null ,
581+ trafficType != null ? trafficType.toJS : _trafficType? .toJS,
578582 eventType.toJS,
579- value != null ? value .toJS : null ,
583+ value? .toJS,
580584 _convertMap (properties, false ));
581585
582586 return result.toDart;
@@ -722,7 +726,7 @@ class SplitioWeb extends SplitioPlatform {
722726
723727 @override
724728 Future <UserConsent > getUserConsent () async {
725- await this . _initFuture;
729+ await _initFuture;
726730
727731 final userConsentStatus = _factory.UserConsent .getStatus ();
728732
@@ -738,7 +742,7 @@ class SplitioWeb extends SplitioPlatform {
738742
739743 @override
740744 Future <void > setUserConsent (bool enabled) async {
741- await this . _initFuture;
745+ await _initFuture;
742746
743747 _factory.UserConsent .setStatus (enabled.toJS);
744748 }
@@ -828,20 +832,21 @@ class SplitioWeb extends SplitioPlatform {
828832 controller.add (null );
829833 }
830834 }).toJS;
831- final registerJsCallback = () async {
835+ Future < void > registerJsCallback () async {
832836 final client = await _getClient (
833837 matchingKey: matchingKey,
834838 bucketingKey: bucketingKey,
835839 );
836840 client.on (client.Event .SDK_UPDATE , jsCallback);
837- };
838- final deregisterJsCallback = () async {
841+ }
842+
843+ Future <void > deregisterJsCallback () async {
839844 final client = await _getClient (
840845 matchingKey: matchingKey,
841846 bucketingKey: bucketingKey,
842847 );
843848 client.off (client.Event .SDK_UPDATE , jsCallback);
844- };
849+ }
845850
846851 // No broadcast to support pause and resume of individual subscriptions
847852 controller = StreamController <void >(
0 commit comments