11// Copyright (c) Microsoft Corporation.
22// Licensed under the MIT license.
33
4- import { FeatureFlag } from "@azure/app-configuration" ;
4+ import type { FeatureFlag as AzAppConfigFeatureFlag } from "@azure/app-configuration" ;
5+ import type {
6+ FeatureFilter ,
7+ FeatureFlag ,
8+ FeatureFlagAllocation ,
9+ FeatureFlagTelemetry ,
10+ FeatureFlagVariant
11+ } from "./featureFlags.js" ;
512
613/**
714 * Converts @see FeatureFlag into the
815 * Microsoft Feature Flag schema object used within the `feature_management.feature_flags`
916 * array. This mirrors the shape produced by parsing a classic feature flag key-value, so that downstream
1017 * feature management parsing and the provider's telemetry/tracing logic are unchanged.
1118 */
12- export function convert ( featureFlag : FeatureFlag ) : any {
13- const result : any = {
19+ export function convert ( featureFlag : AzAppConfigFeatureFlag ) : FeatureFlag {
20+ const result : FeatureFlag = {
1421 id : featureFlag . name ,
15- enabled : featureFlag . enabled
22+ enabled : featureFlag . enabled ,
23+ conditions : {
24+ client_filters : ( featureFlag . conditions ?. filters ?? [ ] ) . map ( filter => {
25+ const clientFilter : FeatureFilter = { name : filter . name } ;
26+ if ( filter . parameters != null ) {
27+ clientFilter . parameters = Object . fromEntries (
28+ Object . entries ( filter . parameters ) . map ( ( [ name , value ] ) : [ string , unknown ] => [ name , JSON . parse ( value ) as unknown ] ) ) ;
29+ }
30+ return clientFilter ;
31+ } )
32+ }
1633 } ;
1734
1835 if ( featureFlag . description != null ) {
1936 result . description = featureFlag . description ;
2037 }
2138
22- // conditions: filters -> client_filters, requirementType -> requirement_type
23- const conditions : any = {
24- client_filters : ( featureFlag . conditions ?. filters ?? [ ] ) . map ( filter => {
25- const clientFilter : any = { name : filter . name } ;
26- if ( filter . parameters != null ) {
27- clientFilter . parameters = Object . fromEntries (
28- Object . entries ( filter . parameters ) . map ( ( [ name , value ] ) => [ name , JSON . parse ( value ) ] ) ) ;
29- }
30- return clientFilter ;
31- } )
32- } ;
3339 if ( featureFlag . conditions ?. requirementType != null ) {
34- conditions . requirement_type = featureFlag . conditions . requirementType ;
40+ result . conditions . requirement_type = featureFlag . conditions . requirementType ;
3541 }
36- result . conditions = conditions ;
3742
3843 // variants: value -> configuration_value, statusOverride -> status_override
3944 if ( featureFlag . variants != null ) {
4045 result . variants = featureFlag . variants . map ( variant => {
41- const result_variant : any = { name : variant . name } ;
46+ const resultVariant : FeatureFlagVariant = { name : variant . name } ;
4247 if ( variant . value !== undefined ) {
43- result_variant . configuration_value = variant . value ;
48+ resultVariant . configuration_value = variant . value ;
4449 }
4550 if ( variant . statusOverride != null ) {
46- result_variant . status_override = variant . statusOverride ;
51+ resultVariant . status_override = variant . statusOverride ;
4752 }
48- return result_variant ;
53+ return resultVariant ;
4954 } ) ;
5055 }
5156
5257 // allocation: camelCase -> snake_case
5358 if ( featureFlag . allocation != null ) {
54- const allocation : any = { } ;
59+ const allocation : FeatureFlagAllocation = { } ;
5560 const sourceAllocation = featureFlag . allocation ;
5661 if ( sourceAllocation . defaultWhenDisabled != null ) {
5762 allocation . default_when_disabled = sourceAllocation . defaultWhenDisabled ;
@@ -76,7 +81,7 @@ export function convert(featureFlag: FeatureFlag): any {
7681
7782 // telemetry: metadata is (re)populated later by the provider with ETag/FeatureFlagReference/AllocationId
7883 if ( featureFlag . telemetry != null ) {
79- const telemetry : any = { enabled : featureFlag . telemetry . enabled } ;
84+ const telemetry : FeatureFlagTelemetry = { enabled : featureFlag . telemetry . enabled } ;
8085 if ( featureFlag . telemetry . metadata != null ) {
8186 telemetry . metadata = featureFlag . telemetry . metadata ;
8287 }
0 commit comments