Skip to content

Commit 8cdb3c6

Browse files
Merge pull request #174 from splitio/FME-11223-web-support-linter
[Web support] Apply recommended linter rules and update dependencies range
2 parents 46179b2 + 58e4327 commit 8cdb3c6

File tree

6 files changed

+183
-162
lines changed

6 files changed

+183
-162
lines changed

splitio_web/analysis_options.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
include: package:flutter_lints/flutter.yaml
2+
3+
# Additional information about this file can be found at
4+
# https://dart.dev/guides/language/analysis-options

splitio_web/lib/splitio_web.dart

Lines changed: 59 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:web/web.dart';
77

88
extension 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

Comments
 (0)