1
1
import { Service } from '../service' ;
2
- import { EvaluationContext , JsonValue , Logger , ResolutionDetails } from '@openfeature/core' ;
2
+ import { EvaluationContext , FlagValue , JsonValue , Logger , ResolutionDetails , FlagValueType } from '@openfeature/core' ;
3
3
import { Config } from '../../configuration' ;
4
4
import { FlagdCore } from '@openfeature/flagd-core' ;
5
5
import { DataFetch } from './data-fetch' ;
@@ -10,7 +10,11 @@ export class InProcessService implements Service {
10
10
private _flagdCore : FlagdCore ;
11
11
private _dataFetcher : DataFetch ;
12
12
13
- constructor ( config : Config , dataFetcher ?: DataFetch , logger ?: Logger ) {
13
+ constructor (
14
+ private readonly config : Config ,
15
+ dataFetcher ?: DataFetch ,
16
+ logger ?: Logger ,
17
+ ) {
14
18
this . _flagdCore = new FlagdCore ( undefined , logger ) ;
15
19
this . _dataFetcher = dataFetcher
16
20
? dataFetcher
@@ -36,40 +40,63 @@ export class InProcessService implements Service {
36
40
this . _dataFetcher . disconnect ( ) ;
37
41
}
38
42
39
- resolveBoolean (
43
+ async resolveBoolean (
40
44
flagKey : string ,
41
45
defaultValue : boolean ,
42
46
context : EvaluationContext ,
43
47
logger : Logger ,
44
48
) : Promise < ResolutionDetails < boolean > > {
45
- return Promise . resolve ( this . _flagdCore . resolveBooleanEvaluation ( flagKey , defaultValue , context , logger ) ) ;
49
+ return this . evaluate ( 'boolean' , flagKey , defaultValue , context , logger ) ;
46
50
}
47
51
48
- resolveNumber (
52
+ async resolveNumber (
49
53
flagKey : string ,
50
54
defaultValue : number ,
51
55
context : EvaluationContext ,
52
56
logger : Logger ,
53
57
) : Promise < ResolutionDetails < number > > {
54
- return Promise . resolve ( this . _flagdCore . resolveNumberEvaluation ( flagKey , defaultValue , context , logger ) ) ;
58
+ return this . evaluate ( 'number' , flagKey , defaultValue , context , logger ) ;
55
59
}
56
60
57
- resolveString (
61
+ async resolveString (
58
62
flagKey : string ,
59
63
defaultValue : string ,
60
64
context : EvaluationContext ,
61
65
logger : Logger ,
62
66
) : Promise < ResolutionDetails < string > > {
63
- return Promise . resolve ( this . _flagdCore . resolveStringEvaluation ( flagKey , defaultValue , context , logger ) ) ;
67
+ return this . evaluate ( 'string' , flagKey , defaultValue , context , logger ) ;
64
68
}
65
69
66
- resolveObject < T extends JsonValue > (
70
+ async resolveObject < T extends JsonValue > (
67
71
flagKey : string ,
68
72
defaultValue : T ,
69
73
context : EvaluationContext ,
70
74
logger : Logger ,
71
75
) : Promise < ResolutionDetails < T > > {
72
- return Promise . resolve ( this . _flagdCore . resolveObjectEvaluation ( flagKey , defaultValue , context , logger ) ) ;
76
+ return this . evaluate ( 'object' , flagKey , defaultValue , context , logger ) ;
77
+ }
78
+
79
+ private evaluate < T extends FlagValue > (
80
+ type : FlagValueType ,
81
+ flagKey : string ,
82
+ defaultValue : T ,
83
+ context : EvaluationContext ,
84
+ logger : Logger ,
85
+ ) : ResolutionDetails < T > {
86
+ const details = this . _flagdCore . resolve ( type , flagKey , defaultValue , context , logger ) ;
87
+ return {
88
+ ...details ,
89
+ flagMetadata : this . addFlagMetadata ( ) ,
90
+ } ;
91
+ }
92
+
93
+ /**
94
+ * Adds the flag metadata to the resolution details
95
+ */
96
+ private addFlagMetadata ( ) {
97
+ return {
98
+ ...( this . config . selector ? { scope : this . config . selector } : { } ) ,
99
+ } ;
73
100
}
74
101
75
102
/**
0 commit comments