1
1
import * as optimizely from '@optimizely/optimizely-sdk'
2
- import { OptimizelyDatafile , VariableValue , VariableValuesObject , VariableDef } from './Datafile'
3
- import { StaticUserIdLoader , UserId } from './UserIdLoaders'
2
+ import {
3
+ OptimizelyDatafile ,
4
+ VariableValue ,
5
+ VariableValuesObject ,
6
+ VariableDef ,
7
+ } from './Datafile'
4
8
import { find } from './utils'
5
9
import { ProvidedDatafileLoader , FetchUrlDatafileLoader } from './DatafileLoaders'
6
- import { ProvidedAttributesLoader } from './UserAttributesLoaders'
7
- import { ResourceLoader , ResourceManager } from './ResourceManager'
10
+ import { ResourceLoader , Resource } from './ResourceManager'
8
11
9
12
// export types
10
13
export { OptimizelyDatafile }
@@ -21,18 +24,11 @@ type UserAttributes = {
21
24
export interface OptimizelySDKWrapperConfig extends Partial < optimizely . Config > {
22
25
datafile ?: OptimizelyDatafile
23
26
sdkKey ?: string
24
- UNSTABLE_datafileLoader ?: ResourceLoader < OptimizelyDatafile >
25
-
26
- attributes ?: UserAttributes
27
- UNSTABLE_attributesLoader ?: ResourceLoader < UserAttributes >
28
-
29
- userId ?: string
30
- UNSTABLE_userIdLoader ?: ResourceLoader < UserId >
31
27
}
32
28
33
29
type TrackEventCallArgs = [
34
30
string ,
35
- string | undefined ,
31
+ string ,
36
32
UserAttributes | undefined ,
37
33
optimizely . EventTags | undefined
38
34
]
@@ -46,9 +42,8 @@ export class OptimizelySDKWrapper {
46
42
public instance : optimizely . Client
47
43
public isInitialized : boolean
48
44
45
+ public datafileResource : Resource < OptimizelyDatafile >
49
46
public datafile : OptimizelyDatafile | null
50
- private userId : string | null
51
- private attributes : UserAttributes
52
47
53
48
private initialConfig : OptimizelySDKWrapperConfig
54
49
@@ -57,8 +52,6 @@ export class OptimizelySDKWrapper {
57
52
// This will be `datafile` and `attributes`
58
53
private initializingPromise : Promise < any >
59
54
60
- private resourceManager : ResourceManager
61
-
62
55
/**
63
56
* Creates an instance of OptimizelySDKWrapper.
64
57
* @param {OptimizelySDKWrapperConfig } [config={}]
@@ -70,20 +63,15 @@ export class OptimizelySDKWrapper {
70
63
this . datafile = null
71
64
this . trackEventQueue = [ ]
72
65
73
- this . resourceManager = new ResourceManager ( {
74
- datafile : this . setupDatafileLoader ( config ) ,
75
- attributes : this . setupAttributesLoader ( config ) ,
76
- userId : this . setupUserIdLoader ( config ) ,
77
- } )
66
+ this . datafileResource = this . setupDatafileResource ( config )
78
67
79
- if ( this . resourceManager . allResourcesLoaded ( ) ) {
68
+ if ( this . datafileResource . hasLoaded ) {
80
69
this . onInitialized ( )
81
70
this . initializingPromise = Promise . resolve ( )
82
71
} else {
83
- this . initializingPromise = this . resourceManager . allResourcePromises ( )
84
- . then ( ( ) => {
85
- this . onInitialized ( ) ;
86
- } )
72
+ this . initializingPromise = this . datafileResource . promise . then ( ( ) => {
73
+ this . onInitialized ( )
74
+ } )
87
75
}
88
76
}
89
77
@@ -92,7 +80,7 @@ export class OptimizelySDKWrapper {
92
80
* Returns a promise where the resolved value is a boolean indicating whether
93
81
* the optimizely instance has been initialized. This only is false when
94
82
* you supply a timeout
95
- *
83
+
96
84
* @param {{ timeout?: number } } [config={}]
97
85
* @returns {Promise<boolean> }
98
86
* @memberof OptimizelySDKWrapper
@@ -231,21 +219,41 @@ export class OptimizelySDKWrapper {
231
219
232
220
const variableObj : VariableValuesObject = { }
233
221
variableDefs . forEach ( ( { key, type } ) => {
234
- switch ( type ) {
222
+ switch ( type ) {
235
223
case 'string' :
236
- variableObj [ key ] = this . instance . getFeatureVariableString ( feature , key , userId , attributes )
237
- break ;
224
+ variableObj [ key ] = this . instance . getFeatureVariableString (
225
+ feature ,
226
+ key ,
227
+ userId ,
228
+ attributes ,
229
+ )
230
+ break
238
231
239
232
case 'boolean' :
240
- variableObj [ key ] = this . instance . getFeatureVariableBoolean ( feature , key , userId , attributes )
233
+ variableObj [ key ] = this . instance . getFeatureVariableBoolean (
234
+ feature ,
235
+ key ,
236
+ userId ,
237
+ attributes ,
238
+ )
241
239
break
242
240
243
241
case 'integer' :
244
- variableObj [ key ] = this . instance . getFeatureVariableInteger ( feature , key , userId , attributes )
242
+ variableObj [ key ] = this . instance . getFeatureVariableInteger (
243
+ feature ,
244
+ key ,
245
+ userId ,
246
+ attributes ,
247
+ )
245
248
break
246
249
247
250
case 'double' :
248
- variableObj [ key ] = this . instance . getFeatureVariableDouble ( feature , key , userId , attributes )
251
+ variableObj [ key ] = this . instance . getFeatureVariableDouble (
252
+ feature ,
253
+ key ,
254
+ userId ,
255
+ attributes ,
256
+ )
249
257
break
250
258
}
251
259
} )
@@ -336,7 +344,11 @@ export class OptimizelySDKWrapper {
336
344
* @returns {boolean }
337
345
* @memberof OptimizelySDKWrapper
338
346
*/
339
- public setForcedVariation ( experiment : string , userId : string , variationKey : string ) : boolean {
347
+ public setForcedVariation (
348
+ experiment : string ,
349
+ userId : string ,
350
+ variationKey : string ,
351
+ ) : boolean {
340
352
return this . instance . setForcedVariation ( experiment , userId , variationKey )
341
353
}
342
354
@@ -360,20 +372,9 @@ export class OptimizelySDKWrapper {
360
372
}
361
373
}
362
374
363
- private setupAttributesLoader ( config : OptimizelySDKWrapperConfig ) : ResourceLoader < UserAttributes > {
364
- let attributesLoader : ResourceLoader < UserAttributes >
365
-
366
- if ( config . UNSTABLE_attributesLoader ) {
367
- attributesLoader = config . UNSTABLE_attributesLoader
368
- } else {
369
- attributesLoader = new ProvidedAttributesLoader ( {
370
- attributes : config . attributes ,
371
- } )
372
- }
373
- return attributesLoader
374
- }
375
-
376
- private setupDatafileLoader ( config : OptimizelySDKWrapperConfig ) : ResourceLoader < OptimizelyDatafile > {
375
+ private setupDatafileResource (
376
+ config : OptimizelySDKWrapperConfig ,
377
+ ) : Resource < OptimizelyDatafile > {
377
378
let datafileLoader : ResourceLoader < OptimizelyDatafile >
378
379
379
380
if ( config . datafile ) {
@@ -384,29 +385,15 @@ export class OptimizelySDKWrapper {
384
385
datafileLoader = new FetchUrlDatafileLoader ( {
385
386
sdkKey : config . sdkKey ,
386
387
} )
387
- } else if ( config . UNSTABLE_datafileLoader ) {
388
- datafileLoader = config . UNSTABLE_datafileLoader
389
388
} else {
390
- throw new Error ( 'Must supply either "datafile", "SDKKey" or "datafileLoader" ' )
389
+ throw new Error ( 'Must supply either "datafile", "SDKKey"' )
391
390
}
392
391
393
- return datafileLoader
394
- }
395
-
396
- private setupUserIdLoader ( config : OptimizelySDKWrapperConfig ) : ResourceLoader < UserId > {
397
- if ( config . UNSTABLE_userIdLoader ) {
398
- return config . UNSTABLE_userIdLoader
399
- } else if ( config . userId ) {
400
- return new StaticUserIdLoader ( config . userId )
401
- } else {
402
- return new StaticUserIdLoader ( null )
403
- }
392
+ return new Resource ( datafileLoader )
404
393
}
405
394
406
395
private onInitialized ( ) {
407
- const datafile = this . resourceManager . datafile . value
408
- this . userId = this . resourceManager . userId . value || null
409
- this . attributes = this . resourceManager . attributes . value || { }
396
+ const datafile = this . datafileResource . value
410
397
if ( datafile ) {
411
398
this . datafile = datafile
412
399
}
0 commit comments