@azure/app-configuration-importer 1.1.0-preview → 1.1.2-preview

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@ import { featureFlagPrefix, featureFlagContentType } from "@azure/app-configurat
15
15
  import { AjvValidationError, ArgumentError } from "../../errors";
16
16
  import * as flat from "flat";
17
17
  import { ConfigurationFormat } from "../../enums";
18
- import { isJsonContentType } from "../utils";
18
+ import { isJsonContentType, serializeFeatureFlagValue } from "../utils";
19
19
  import { RequirementType } from "../../featureFlag";
20
20
  import { Constants } from "../constants";
21
21
  import { MsFeatureFlagValueSchema } from "../../MsFeatureFlagSchema";
@@ -183,7 +183,7 @@ class FeatureFlagConfigurationSettingsConverter {
183
183
  const setting = {
184
184
  key: featureFlagPrefix + prefix + featureFlag.id,
185
185
  label: options.label,
186
- value: featureFlag,
186
+ value: serializeFeatureFlagValue(featureFlag),
187
187
  contentType: featureFlagContentType,
188
188
  tags: options.tags
189
189
  };
@@ -1 +1 @@
1
- {"version":3,"file":"defaultConfigurationSettingsConverter.js","sourceRoot":"","sources":["../../../../src/internal/parsers/defaultConfigurationSettingsConverter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n SetConfigurationSettingParam,\n SecretReferenceValue,\n featureFlagPrefix,\n featureFlagContentType\n} from \"@azure/app-configuration\";\nimport { SourceOptions } from \"../../importOptions\";\nimport { ConfigurationSettingsConverter } from \"./configurationSettingsConverter\";\nimport { AjvValidationError, ArgumentError } from \"../../errors\";\nimport { ClientFilter } from \"../../models\";\nimport * as flat from \"flat\";\nimport { ConfigurationFormat } from \"../../enums\";\nimport { isJsonContentType } from \"../utils\";\nimport { MsFeatureFlagValue, RequirementType } from \"../../featureFlag\";\nimport { Constants } from \"../constants\";\nimport { MsFeatureFlagValueSchema } from \"../../MsFeatureFlagSchema\";\nimport Ajv, { ErrorObject } from \"ajv\";\n\n/**\n * Format Parser for common key-value configuration.\n *\n * @internal\n * */\nexport class DefaultConfigurationSettingsConverter implements ConfigurationSettingsConverter {\n /**\n * Parse the raw configuration object to collection of ConfigurationSettings\n *\n * @param config Raw configuration object\n * @param options Configuration options to dictate how the configuration be parsed.\n * */\n public Convert(\n config: object,\n options: SourceOptions\n ): SetConfigurationSettingParam<string | MsFeatureFlagValue | SecretReferenceValue>[] {\n let configurationSettings = new Array<\n SetConfigurationSettingParam<string | MsFeatureFlagValue>\n >();\n\n let featureFlagsConfigSettings = new Array<SetConfigurationSettingParam<MsFeatureFlagValue>>();\n let foundMsFmSchema = false;\n let foundDotnetFmSchema = false;\n let dotnetFmSchemaKeyWord = \"\";\n\n const featureFlagsDict: any = {};\n\n if (options.format == ConfigurationFormat.Properties && !options.skipFeatureFlags) {\n this.checkFeatureManagementExist(config);\n }\n\n for (let i = 0; i < Constants.FeatureManagementKeyWords.length - 1; i++) {\n if (Constants.FeatureManagementKeyWords[i] in config) {\n if (foundDotnetFmSchema) {\n throw new ArgumentError(\n `Unable to proceed because data contains multiple sections corresponding to Feature Management. with the key, ${Constants.FeatureManagementKeyWords[i]}`\n );\n }\n \n foundDotnetFmSchema = true;\n dotnetFmSchemaKeyWord = Constants.FeatureManagementKeyWords[i];\n\n const dotnetFmSchemaKey = dotnetFmSchemaKeyWord as keyof object;\n featureFlagsDict[dotnetFmSchemaKey] = config[dotnetFmSchemaKey];\n delete config[dotnetFmSchemaKey];\n }\n }\n\n const msFeatureManagementKeyWord = Constants.FeatureManagementKeyWords[3];\n if (msFeatureManagementKeyWord in config) {\n if (foundDotnetFmSchema &&\n Object.keys(config[msFeatureManagementKeyWord as keyof object]).some(key => key !== Constants.FeatureFlagsKeyWord)) {\n throw new ArgumentError(\n `Unable to proceed because data contains an already defined dotnet schema section with the key, ${dotnetFmSchemaKeyWord}.`\n );\n }\n\n if (Object.keys(config[msFeatureManagementKeyWord as keyof object]).includes(Constants.FeatureFlagsKeyWord)) {\n foundMsFmSchema = true;\n }\n\n if (Object.keys(config[msFeatureManagementKeyWord as keyof object]).some(key => key !== Constants.FeatureFlagsKeyWord)){\n foundDotnetFmSchema = true;\n dotnetFmSchemaKeyWord = msFeatureManagementKeyWord;\n }\n\n const featureManagementKey = msFeatureManagementKeyWord as keyof object;\n featureFlagsDict[featureManagementKey] = config[featureManagementKey];\n delete config[featureManagementKey];\n }\n\n if ((foundDotnetFmSchema || foundMsFmSchema) && !options.skipFeatureFlags) {\n const featureFlagConverter = new FeatureFlagConfigurationSettingsConverter(\n dotnetFmSchemaKeyWord,\n foundMsFmSchema\n );\n featureFlagsConfigSettings = featureFlagConverter.Convert(featureFlagsDict, options);\n }\n\n const flattenedConfigurationSettings: object = flat.flatten(config, {\n delimiter: options.separator,\n maxDepth: options.depth,\n safe: isJsonContentType(options.contentType) // preserve array for json content type\n });\n configurationSettings = this.toConfigurationSettings(flattenedConfigurationSettings, options);\n configurationSettings = configurationSettings.concat(featureFlagsConfigSettings);\n\n return configurationSettings;\n }\n\n private checkFeatureManagementExist(configurations: object): void {\n const keys: string[] = Object.keys(configurations);\n for (const featureFlagKeyWord of Constants.FeatureManagementKeyWords) {\n if (keys.find(key => key.startsWith(featureFlagKeyWord))) {\n throw new ArgumentError(\"Importing feature flag in Properties format is not supported. Anything in the Properties format being imported will be treated as key value.\");\n }\n }\n }\n\n private toConfigurationSettings(\n flatted: any,\n options: SourceOptions\n ): Array<SetConfigurationSettingParam<string>> {\n const result = new Array<SetConfigurationSettingParam>();\n const isJsonType = isJsonContentType(options.contentType);\n for (const element in flatted) {\n let generateKey: string = element;\n if (options.prefix) {\n generateKey = options.prefix + element;\n }\n\n if (generateKey === \".\" || generateKey === \"..\" || generateKey.indexOf(\"%\") > -1) {\n throw new ArgumentError(\"Key cannot be a '.' or '..', or contain the '%' character.\");\n }\n if (generateKey.startsWith(featureFlagPrefix)) {\n throw new ArgumentError(\"Key cannot start with the reserved prefix for feature flags.\");\n }\n\n // Ignore key-value with empty array/object value when content-type is not json, instead of pushing a kv with an empty array/obj\n // For null value it will be treated as \"null\" string.\n if (!isJsonType && flatted[element] && typeof flatted[element] === \"object\" && Object.keys(flatted[element]).length == 0 ) {\n continue;\n }\n\n const setting: SetConfigurationSettingParam<string> = {\n label: options.label,\n tags: options.tags,\n key: generateKey,\n contentType: options.contentType,\n value:\n typeof flatted[element] === \"object\" || isJsonType\n ? JSON.stringify(flatted[element])\n : flatted[element].toString()\n };\n\n result.push(setting);\n }\n\n return result;\n }\n}\n\n/**\n * ConfigurationSettings converter for feature flag.\n *\n * @internal\n * */\nclass FeatureFlagConfigurationSettingsConverter implements ConfigurationSettingsConverter {\n dotnetFmSchemaKeyWord: string;\n foundMsFeatureManagement: boolean;\n ajv: Ajv;\n\n constructor(dotnetFmSchemaKeyWord: string, foundMsFeatureManagement: boolean) {\n this.dotnetFmSchemaKeyWord = dotnetFmSchemaKeyWord;\n this.foundMsFeatureManagement = foundMsFeatureManagement;\n this.ajv = new Ajv();\n\n if (!this.dotnetFmSchemaKeyWord && !this.foundMsFeatureManagement) {\n throw new ArgumentError(\"No feature management was found\");\n }\n }\n\n /**\n * @inheritdoc\n * */\n Convert(\n config: object,\n options: SourceOptions\n ): SetConfigurationSettingParam<MsFeatureFlagValue>[] {\n const settings = new Array<SetConfigurationSettingParam<MsFeatureFlagValue>>();\n const featureFlags = new Array<MsFeatureFlagValue>();\n\n if (this.dotnetFmSchemaKeyWord) {\n const dotnetSchemaFeatureFlags = this.getDotnetFmSchemaFeatureFlags(config);\n\n const featureManagementIndex: number = Constants.FeatureManagementKeyWords.indexOf(this.dotnetFmSchemaKeyWord);\n\n for (const featureFlag in dotnetSchemaFeatureFlags) {\n if (!this.validateFeatureName(featureFlag)) {\n throw new ArgumentError(\n `Feature flag ${featureFlag} contains invalid character,'%' and ':' are not allowed in feature name. Please provide valid feature name.`\n );\n }\n\n const featureFlagValue = this.getFeatureFlagValueFromDotnetSchema(\n featureFlag,\n dotnetSchemaFeatureFlags[featureFlag],\n Constants.EnabledForKeyWords[featureManagementIndex],\n Constants.RequirementTypeKeyWords[featureManagementIndex]\n );\n\n featureFlags.push(featureFlagValue);\n }\n }\n\n if (this.foundMsFeatureManagement) {\n const msFmSectionFeatureFlags = this.getMsFmSchemaFeatureFlags(config);\n\n for (const featureFlag of msFmSectionFeatureFlags) {\n if (!featureFlag.id) {\n throw new ArgumentError(\n \"Feature flag without id is found, id is a required property.\"\n );\n }\n\n if (!this.validateFeatureName(featureFlag.id)) {\n throw new ArgumentError(\n `Feature flag id ${featureFlag.id} contains invalid character,'%' and ':' are not allowed.`\n );\n }\n\n const featureFlagValue = this.getFeatureFlagValueFromMsFmSchema(featureFlag);\n\n // Check if the featureFlag with the same id already exists\n // Replace the existing flag with the later one, the later one always wins\n const indexOfExistingFlag = featureFlags.findIndex(existingFeatureFlag => existingFeatureFlag.id === featureFlag.id);\n\n if (indexOfExistingFlag !== -1) {\n featureFlags[indexOfExistingFlag] = featureFlagValue;\n }\n else {\n featureFlags.push(featureFlagValue);\n }\n }\n }\n\n const prefix: string = options.prefix ?? \"\";\n for (const featureFlag of featureFlags) {\n const setting: SetConfigurationSettingParam<MsFeatureFlagValue> = {\n key: featureFlagPrefix + prefix + featureFlag.id,\n label: options.label,\n value: featureFlag,\n contentType: featureFlagContentType,\n tags: options.tags\n };\n\n settings.push(setting);\n }\n\n return settings;\n }\n\n private validateFeatureName(featureName: string): boolean {\n if (featureName) {\n const valid = /^[^:%]*$/;\n return valid.test(featureName);\n }\n else {\n return false;\n }\n }\n\n private getFeatureFlagValueFromDotnetSchema(\n featureFlagName: string,\n featureData: any,\n enabledForKeyWord: string,\n requirementTypeKeyWord: string\n ): MsFeatureFlagValue {\n const defaultFeatureConditions = { clientFilters: [] };\n\n const featureFlagValue: MsFeatureFlagValue = {\n id: featureFlagName,\n description: \"\",\n enabled: false,\n conditions: {\n clientFilters: []\n }\n };\n\n if (typeof featureData == \"object\") {\n const filters = featureData[enabledForKeyWord];\n\n if (!filters) {\n throw new ArgumentError(\n `Data contains feature flags in invalid format. Feature flag '${featureFlagName}' must contain '${enabledForKeyWord}' definition or have a true/false value.`\n );\n }\n\n if (filters.length != 0) {\n featureFlagValue.enabled = true;\n featureFlagValue.conditions.clientFilters = filters;\n\n if (featureFlagValue.conditions && featureFlagValue.conditions.clientFilters) {\n for (let i = 0; i < featureFlagValue.conditions.clientFilters.length; i++) {\n const parameters: Partial<ClientFilter> = {};\n //\n // Converting client_filter keys to lower case\n const lowerCaseFilters = this.getLowerCaseFilters(\n featureFlagValue.conditions.clientFilters[i]\n );\n\n const filtersName = lowerCaseFilters[\"name\"];\n const filtersParameters = lowerCaseFilters[\"parameters\"];\n\n if (filtersName) {\n if (filtersName.toLowerCase() == \"alwayson\") {\n featureFlagValue.conditions = defaultFeatureConditions;\n break;\n }\n parameters.name = filtersName;\n if (filtersParameters) {\n parameters.parameters = filtersParameters;\n }\n\n featureFlagValue.conditions.clientFilters[i] = parameters as ClientFilter;\n }\n else {\n throw new ArgumentError(\n `This feature flag '${featureFlagName}' has a filter without the required 'name' property.`\n );\n }\n }\n }\n }\n\n const requirementType = featureData[requirementTypeKeyWord];\n\n if (requirementType) {\n if (this.validateRequirementType(featureFlagName, requirementType)) {\n featureFlagValue.conditions.requirementType = requirementType;\n }\n }\n }\n else if (typeof featureData == \"boolean\") {\n featureFlagValue.enabled = featureData;\n }\n else {\n throw new ArgumentError(\n `Data contains feature flags in invalid format. The type of ${featureFlagName} should be either boolean or dictionary.`\n );\n }\n\n return featureFlagValue;\n }\n\n private getFeatureFlagValueFromMsFmSchema(featureFlag: any): MsFeatureFlagValue {\n const validate = this.ajv.compile<MsFeatureFlagValue>(MsFeatureFlagValueSchema);\n const featureFlagCopy = JSON.parse(JSON.stringify(featureFlag)); //deep copy\n\n // normalize client filters\n if (featureFlagCopy.conditions && featureFlagCopy.conditions.client_filters) {\n for (let i = 0; i < featureFlagCopy.conditions.client_filters.length; i++) {\n featureFlagCopy.conditions.client_filters[i] = this.getLowerCaseFilters(featureFlagCopy.conditions.client_filters[i]);\n }\n }\n\n const valid = validate(featureFlagCopy);\n if (!valid) {\n const validationError = new AjvValidationError(validate.errors as ErrorObject[]);\n throw new ArgumentError(`Feature flag '${featureFlag.id}' is not in the correct format. ${validationError.getFriendlyMessage()}`);\n }\n\n const parsedFeatureFlag: MsFeatureFlagValue = {\n ...featureFlag,\n conditions: {\n clientFilters: featureFlag.conditions?.client_filters ?? []\n }\n };\n\n if (featureFlag.display_name) {\n parsedFeatureFlag.displayName = featureFlag.display_name;\n }\n\n if (featureFlag.conditions?.requirement_type) {\n parsedFeatureFlag.conditions.requirementType = featureFlag.conditions.requirement_type;\n }\n\n return parsedFeatureFlag;\n }\n\n private getLowerCaseFilters(clientFilter: ClientFilter): { [key: string]: any } {\n const keys: Array<string> = Object.keys(clientFilter);\n const lowerCaseFilters: { [key: string]: any } = {};\n\n for (let i = 0; i < keys.length; i++) {\n lowerCaseFilters[keys[i].toLowerCase()] = clientFilter[keys[i] as keyof object];\n }\n\n return lowerCaseFilters;\n }\n\n private validateRequirementType(requirement_type: any, featureFlagName: string) {\n if(!Object.values(RequirementType).includes(requirement_type)){\n throw new ArgumentError(\n `This feature flag '${featureFlagName}' must have any/all requirement type.`\n );\n }\n\n return true;\n }\n\n private getMsFmSchemaFeatureFlags(config: object): Array<{ [key: string]: any }>{\n const msFeatureManagementKeyWord = Constants.FeatureManagementKeyWords[3];\n const featureManagementKey = msFeatureManagementKeyWord as keyof object;\n const featureManagementSection = config[featureManagementKey];\n\n if (typeof featureManagementSection !== \"object\") {\n throw new ArgumentError(`The ${msFeatureManagementKeyWord} section must be an object.`);\n }\n\n if (!Array.isArray(featureManagementSection[Constants.FeatureFlagsKeyWord])) {\n throw new ArgumentError(`The ${Constants.FeatureFlagsKeyWord} key within ${msFeatureManagementKeyWord} must be an array.`);\n }\n\n return featureManagementSection[Constants.FeatureFlagsKeyWord];\n }\n\n private getDotnetFmSchemaFeatureFlags(config: object): { [key: string]: any } {\n const msFeatureManagementKeyWord = Constants.FeatureManagementKeyWords[3];\n const featureManagementSection: object = config[this.dotnetFmSchemaKeyWord as keyof object];\n\n if (typeof featureManagementSection !== \"object\") {\n throw new ArgumentError(`The ${this.dotnetFmSchemaKeyWord} section must be an object.`);\n }\n\n if (this.dotnetFmSchemaKeyWord === msFeatureManagementKeyWord) { //dotnet schema might be nested within msFmSchema\n const { feature_flags, ...dotnetSchemaFeatureFlags } = featureManagementSection as { [key: string]: any };\n return dotnetSchemaFeatureFlags;\n }\n else {\n return featureManagementSection;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"defaultConfigurationSettingsConverter.js","sourceRoot":"","sources":["../../../../src/internal/parsers/defaultConfigurationSettingsConverter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n SetConfigurationSettingParam,\n featureFlagPrefix,\n featureFlagContentType,\n SecretReferenceValue\n} from \"@azure/app-configuration\";\nimport { SourceOptions } from \"../../importOptions\";\nimport { ConfigurationSettingsConverter } from \"./configurationSettingsConverter\";\nimport { AjvValidationError, ArgumentError } from \"../../errors\";\nimport { ClientFilter } from \"../../models\";\nimport * as flat from \"flat\";\nimport { ConfigurationFormat } from \"../../enums\";\nimport { isJsonContentType, serializeFeatureFlagValue } from \"../utils\";\nimport { MsFeatureFlagValue, RequirementType } from \"../../featureFlag\";\nimport { Constants } from \"../constants\";\nimport { MsFeatureFlagValueSchema } from \"../../MsFeatureFlagSchema\";\nimport Ajv, { ErrorObject } from \"ajv\";\n\n/**\n * Format Parser for common key-value configuration.\n *\n * @internal\n * */\nexport class DefaultConfigurationSettingsConverter implements ConfigurationSettingsConverter {\n /**\n * Parse the raw configuration object to collection of ConfigurationSettings\n *\n * @param config Raw configuration object\n * @param options Configuration options to dictate how the configuration be parsed.\n * */\n public Convert(\n config: object,\n options: SourceOptions\n ): SetConfigurationSettingParam<string | SecretReferenceValue>[] {\n let configurationSettings = new Array<\n SetConfigurationSettingParam<string>\n >();\n\n let featureFlagsConfigSettings = new Array<SetConfigurationSettingParam<string>>();\n let foundMsFmSchema = false;\n let foundDotnetFmSchema = false;\n let dotnetFmSchemaKeyWord = \"\";\n\n const featureFlagsDict: any = {};\n\n if (options.format == ConfigurationFormat.Properties && !options.skipFeatureFlags) {\n this.checkFeatureManagementExist(config);\n }\n\n for (let i = 0; i < Constants.FeatureManagementKeyWords.length - 1; i++) {\n if (Constants.FeatureManagementKeyWords[i] in config) {\n if (foundDotnetFmSchema) {\n throw new ArgumentError(\n `Unable to proceed because data contains multiple sections corresponding to Feature Management. with the key, ${Constants.FeatureManagementKeyWords[i]}`\n );\n }\n \n foundDotnetFmSchema = true;\n dotnetFmSchemaKeyWord = Constants.FeatureManagementKeyWords[i];\n\n const dotnetFmSchemaKey = dotnetFmSchemaKeyWord as keyof object;\n featureFlagsDict[dotnetFmSchemaKey] = config[dotnetFmSchemaKey];\n delete config[dotnetFmSchemaKey];\n }\n }\n\n const msFeatureManagementKeyWord = Constants.FeatureManagementKeyWords[3];\n if (msFeatureManagementKeyWord in config) {\n if (foundDotnetFmSchema &&\n Object.keys(config[msFeatureManagementKeyWord as keyof object]).some(key => key !== Constants.FeatureFlagsKeyWord)) {\n throw new ArgumentError(\n `Unable to proceed because data contains an already defined dotnet schema section with the key, ${dotnetFmSchemaKeyWord}.`\n );\n }\n\n if (Object.keys(config[msFeatureManagementKeyWord as keyof object]).includes(Constants.FeatureFlagsKeyWord)) {\n foundMsFmSchema = true;\n }\n\n if (Object.keys(config[msFeatureManagementKeyWord as keyof object]).some(key => key !== Constants.FeatureFlagsKeyWord)){\n foundDotnetFmSchema = true;\n dotnetFmSchemaKeyWord = msFeatureManagementKeyWord;\n }\n\n const featureManagementKey = msFeatureManagementKeyWord as keyof object;\n featureFlagsDict[featureManagementKey] = config[featureManagementKey];\n delete config[featureManagementKey];\n }\n\n if ((foundDotnetFmSchema || foundMsFmSchema) && !options.skipFeatureFlags) {\n const featureFlagConverter = new FeatureFlagConfigurationSettingsConverter(\n dotnetFmSchemaKeyWord,\n foundMsFmSchema\n );\n featureFlagsConfigSettings = featureFlagConverter.Convert(featureFlagsDict, options);\n }\n\n const flattenedConfigurationSettings: object = flat.flatten(config, {\n delimiter: options.separator,\n maxDepth: options.depth,\n safe: isJsonContentType(options.contentType) // preserve array for json content type\n });\n configurationSettings = this.toConfigurationSettings(flattenedConfigurationSettings, options);\n configurationSettings = configurationSettings.concat(featureFlagsConfigSettings);\n\n return configurationSettings;\n }\n\n private checkFeatureManagementExist(configurations: object): void {\n const keys: string[] = Object.keys(configurations);\n for (const featureFlagKeyWord of Constants.FeatureManagementKeyWords) {\n if (keys.find(key => key.startsWith(featureFlagKeyWord))) {\n throw new ArgumentError(\"Importing feature flag in Properties format is not supported. Anything in the Properties format being imported will be treated as key value.\");\n }\n }\n }\n\n private toConfigurationSettings(\n flatted: any,\n options: SourceOptions\n ): Array<SetConfigurationSettingParam<string>> {\n const result = new Array<SetConfigurationSettingParam>();\n const isJsonType = isJsonContentType(options.contentType);\n for (const element in flatted) {\n let generateKey: string = element;\n if (options.prefix) {\n generateKey = options.prefix + element;\n }\n\n if (generateKey === \".\" || generateKey === \"..\" || generateKey.indexOf(\"%\") > -1) {\n throw new ArgumentError(\"Key cannot be a '.' or '..', or contain the '%' character.\");\n }\n if (generateKey.startsWith(featureFlagPrefix)) {\n throw new ArgumentError(\"Key cannot start with the reserved prefix for feature flags.\");\n }\n\n // Ignore key-value with empty array/object value when content-type is not json, instead of pushing a kv with an empty array/obj\n // For null value it will be treated as \"null\" string.\n if (!isJsonType && flatted[element] && typeof flatted[element] === \"object\" && Object.keys(flatted[element]).length == 0 ) {\n continue;\n }\n\n const setting: SetConfigurationSettingParam<string> = {\n label: options.label,\n tags: options.tags,\n key: generateKey,\n contentType: options.contentType,\n value:\n typeof flatted[element] === \"object\" || isJsonType\n ? JSON.stringify(flatted[element])\n : flatted[element].toString()\n };\n\n result.push(setting);\n }\n\n return result;\n }\n}\n\n/**\n * ConfigurationSettings converter for feature flag.\n *\n * @internal\n * */\nclass FeatureFlagConfigurationSettingsConverter implements ConfigurationSettingsConverter {\n dotnetFmSchemaKeyWord: string;\n foundMsFeatureManagement: boolean;\n ajv: Ajv;\n\n constructor(dotnetFmSchemaKeyWord: string, foundMsFeatureManagement: boolean) {\n this.dotnetFmSchemaKeyWord = dotnetFmSchemaKeyWord;\n this.foundMsFeatureManagement = foundMsFeatureManagement;\n this.ajv = new Ajv();\n\n if (!this.dotnetFmSchemaKeyWord && !this.foundMsFeatureManagement) {\n throw new ArgumentError(\"No feature management was found\");\n }\n }\n\n /**\n * @inheritdoc\n * */\n Convert(\n config: object,\n options: SourceOptions\n ): SetConfigurationSettingParam<string>[] {\n const settings = new Array<SetConfigurationSettingParam<string>>();\n const featureFlags = new Array<MsFeatureFlagValue>();\n\n if (this.dotnetFmSchemaKeyWord) {\n const dotnetSchemaFeatureFlags = this.getDotnetFmSchemaFeatureFlags(config);\n\n const featureManagementIndex: number = Constants.FeatureManagementKeyWords.indexOf(this.dotnetFmSchemaKeyWord);\n\n for (const featureFlag in dotnetSchemaFeatureFlags) {\n if (!this.validateFeatureName(featureFlag)) {\n throw new ArgumentError(\n `Feature flag ${featureFlag} contains invalid character,'%' and ':' are not allowed in feature name. Please provide valid feature name.`\n );\n }\n\n const featureFlagValue = this.getFeatureFlagValueFromDotnetSchema(\n featureFlag,\n dotnetSchemaFeatureFlags[featureFlag],\n Constants.EnabledForKeyWords[featureManagementIndex],\n Constants.RequirementTypeKeyWords[featureManagementIndex]\n );\n\n featureFlags.push(featureFlagValue);\n }\n }\n\n if (this.foundMsFeatureManagement) {\n const msFmSectionFeatureFlags = this.getMsFmSchemaFeatureFlags(config);\n\n for (const featureFlag of msFmSectionFeatureFlags) {\n if (!featureFlag.id) {\n throw new ArgumentError(\n \"Feature flag without id is found, id is a required property.\"\n );\n }\n\n if (!this.validateFeatureName(featureFlag.id)) {\n throw new ArgumentError(\n `Feature flag id ${featureFlag.id} contains invalid character,'%' and ':' are not allowed.`\n );\n }\n\n const featureFlagValue = this.getFeatureFlagValueFromMsFmSchema(featureFlag);\n\n // Check if the featureFlag with the same id already exists\n // Replace the existing flag with the later one, the later one always wins\n const indexOfExistingFlag = featureFlags.findIndex(existingFeatureFlag => existingFeatureFlag.id === featureFlag.id);\n\n if (indexOfExistingFlag !== -1) {\n featureFlags[indexOfExistingFlag] = featureFlagValue;\n }\n else {\n featureFlags.push(featureFlagValue);\n }\n }\n }\n\n const prefix: string = options.prefix ?? \"\";\n for (const featureFlag of featureFlags) {\n const setting: SetConfigurationSettingParam<string> = {\n key: featureFlagPrefix + prefix + featureFlag.id,\n label: options.label,\n value: serializeFeatureFlagValue(featureFlag),\n contentType: featureFlagContentType,\n tags: options.tags\n };\n\n settings.push(setting);\n }\n\n return settings;\n }\n\n private validateFeatureName(featureName: string): boolean {\n if (featureName) {\n const valid = /^[^:%]*$/;\n return valid.test(featureName);\n }\n else {\n return false;\n }\n }\n\n private getFeatureFlagValueFromDotnetSchema(\n featureFlagName: string,\n featureData: any,\n enabledForKeyWord: string,\n requirementTypeKeyWord: string\n ): MsFeatureFlagValue {\n const defaultFeatureConditions = { clientFilters: [] };\n\n const featureFlagValue: MsFeatureFlagValue = {\n id: featureFlagName,\n description: \"\",\n enabled: false,\n conditions: {\n clientFilters: []\n }\n };\n\n if (typeof featureData == \"object\") {\n const filters = featureData[enabledForKeyWord];\n\n if (!filters) {\n throw new ArgumentError(\n `Data contains feature flags in invalid format. Feature flag '${featureFlagName}' must contain '${enabledForKeyWord}' definition or have a true/false value.`\n );\n }\n\n if (filters.length != 0) {\n featureFlagValue.enabled = true;\n featureFlagValue.conditions.clientFilters = filters;\n\n if (featureFlagValue.conditions && featureFlagValue.conditions.clientFilters) {\n for (let i = 0; i < featureFlagValue.conditions.clientFilters.length; i++) {\n const parameters: Partial<ClientFilter> = {};\n //\n // Converting client_filter keys to lower case\n const lowerCaseFilters = this.getLowerCaseFilters(\n featureFlagValue.conditions.clientFilters[i]\n );\n\n const filtersName = lowerCaseFilters[\"name\"];\n const filtersParameters = lowerCaseFilters[\"parameters\"];\n\n if (filtersName) {\n if (filtersName.toLowerCase() == \"alwayson\") {\n featureFlagValue.conditions = defaultFeatureConditions;\n break;\n }\n parameters.name = filtersName;\n if (filtersParameters) {\n parameters.parameters = filtersParameters;\n }\n\n featureFlagValue.conditions.clientFilters[i] = parameters as ClientFilter;\n }\n else {\n throw new ArgumentError(\n `This feature flag '${featureFlagName}' has a filter without the required 'name' property.`\n );\n }\n }\n }\n }\n\n const requirementType = featureData[requirementTypeKeyWord];\n\n if (requirementType) {\n if (this.validateRequirementType(featureFlagName, requirementType)) {\n featureFlagValue.conditions.requirementType = requirementType;\n }\n }\n }\n else if (typeof featureData == \"boolean\") {\n featureFlagValue.enabled = featureData;\n }\n else {\n throw new ArgumentError(\n `Data contains feature flags in invalid format. The type of ${featureFlagName} should be either boolean or dictionary.`\n );\n }\n\n return featureFlagValue;\n }\n\n private getFeatureFlagValueFromMsFmSchema(featureFlag: any): MsFeatureFlagValue {\n const validate = this.ajv.compile<MsFeatureFlagValue>(MsFeatureFlagValueSchema);\n const featureFlagCopy = JSON.parse(JSON.stringify(featureFlag)); //deep copy\n\n // normalize client filters\n if (featureFlagCopy.conditions && featureFlagCopy.conditions.client_filters) {\n for (let i = 0; i < featureFlagCopy.conditions.client_filters.length; i++) {\n featureFlagCopy.conditions.client_filters[i] = this.getLowerCaseFilters(featureFlagCopy.conditions.client_filters[i]);\n }\n }\n\n const valid = validate(featureFlagCopy);\n if (!valid) {\n const validationError = new AjvValidationError(validate.errors as ErrorObject[]);\n throw new ArgumentError(`Feature flag '${featureFlag.id}' is not in the correct format. ${validationError.getFriendlyMessage()}`);\n }\n\n const parsedFeatureFlag: MsFeatureFlagValue = {\n ...featureFlag,\n conditions: {\n clientFilters: featureFlag.conditions?.client_filters ?? []\n }\n };\n\n if (featureFlag.display_name) {\n parsedFeatureFlag.displayName = featureFlag.display_name;\n }\n\n if (featureFlag.conditions?.requirement_type) {\n parsedFeatureFlag.conditions.requirementType = featureFlag.conditions.requirement_type;\n }\n\n return parsedFeatureFlag;\n }\n\n private getLowerCaseFilters(clientFilter: ClientFilter): { [key: string]: any } {\n const keys: Array<string> = Object.keys(clientFilter);\n const lowerCaseFilters: { [key: string]: any } = {};\n\n for (let i = 0; i < keys.length; i++) {\n lowerCaseFilters[keys[i].toLowerCase()] = clientFilter[keys[i] as keyof object];\n }\n\n return lowerCaseFilters;\n }\n\n private validateRequirementType(requirement_type: any, featureFlagName: string) {\n if(!Object.values(RequirementType).includes(requirement_type)){\n throw new ArgumentError(\n `This feature flag '${featureFlagName}' must have any/all requirement type.`\n );\n }\n\n return true;\n }\n\n private getMsFmSchemaFeatureFlags(config: object): Array<{ [key: string]: any }>{\n const msFeatureManagementKeyWord = Constants.FeatureManagementKeyWords[3];\n const featureManagementKey = msFeatureManagementKeyWord as keyof object;\n const featureManagementSection = config[featureManagementKey];\n\n if (typeof featureManagementSection !== \"object\") {\n throw new ArgumentError(`The ${msFeatureManagementKeyWord} section must be an object.`);\n }\n\n if (!Array.isArray(featureManagementSection[Constants.FeatureFlagsKeyWord])) {\n throw new ArgumentError(`The ${Constants.FeatureFlagsKeyWord} key within ${msFeatureManagementKeyWord} must be an array.`);\n }\n\n return featureManagementSection[Constants.FeatureFlagsKeyWord];\n }\n\n private getDotnetFmSchemaFeatureFlags(config: object): { [key: string]: any } {\n const msFeatureManagementKeyWord = Constants.FeatureManagementKeyWords[3];\n const featureManagementSection: object = config[this.dotnetFmSchemaKeyWord as keyof object];\n\n if (typeof featureManagementSection !== \"object\") {\n throw new ArgumentError(`The ${this.dotnetFmSchemaKeyWord} section must be an object.`);\n }\n\n if (this.dotnetFmSchemaKeyWord === msFeatureManagementKeyWord) { //dotnet schema might be nested within msFmSchema\n const { feature_flags, ...dotnetSchemaFeatureFlags } = featureManagementSection as { [key: string]: any };\n return dotnetSchemaFeatureFlags;\n }\n else {\n return featureManagementSection;\n }\n }\n}\n"]}
@@ -90,40 +90,82 @@ export function validateOptions(options) {
90
90
  }
91
91
  }
92
92
  function isFeatureFlagValueEqual(valueA, valueB) {
93
+ var _a, _b;
93
94
  let featureFlagAValue;
94
95
  if (typeof valueA == "string") {
95
- featureFlagAValue = toFeatureFlagValue(valueA);
96
+ featureFlagAValue = toMsFeatureFlagValue(valueA);
96
97
  }
97
98
  else {
98
99
  featureFlagAValue = valueA;
99
100
  }
100
- const featureFlagBValue = toFeatureFlagValue(valueB);
101
+ const featureFlagBValue = toMsFeatureFlagValue(valueB);
101
102
  if (Object.keys(featureFlagAValue).length !== Object.keys(featureFlagBValue).length) {
102
103
  return false;
103
104
  }
104
105
  return featureFlagAValue.id == featureFlagBValue.id &&
105
106
  featureFlagAValue.enabled == featureFlagBValue.enabled &&
106
107
  featureFlagAValue.description == featureFlagBValue.description &&
107
- areFeatureFlagFiltersEqual(featureFlagAValue.conditions.clientFilters, featureFlagBValue.conditions.clientFilters);
108
+ areArrayEqual(featureFlagAValue.conditions.clientFilters, featureFlagBValue.conditions.clientFilters) &&
109
+ isEqual(featureFlagAValue.allocation, featureFlagBValue.allocation) &&
110
+ areArrayEqual((_a = featureFlagAValue.variants) !== null && _a !== void 0 ? _a : [], (_b = featureFlagBValue.variants) !== null && _b !== void 0 ? _b : []) &&
111
+ isEqual(featureFlagAValue.telemetry, featureFlagBValue.telemetry);
108
112
  }
109
- function areFeatureFlagFiltersEqual(filterA, filterB) {
110
- if (filterA.length !== filterB.length) {
113
+ function areArrayEqual(arrayA, arrayB) {
114
+ if (arrayA.length !== arrayB.length) {
111
115
  return false;
112
116
  }
113
- for (let i = 0; i < filterA.length; i++) {
114
- if (!isEqual(filterA[i], filterB[i])) {
117
+ for (let i = 0; i < arrayA.length; i++) {
118
+ if (!isEqual(arrayA[i], arrayB[i])) {
115
119
  return false;
116
120
  }
117
121
  }
118
122
  return true;
119
123
  }
120
- function toFeatureFlagValue(value) {
124
+ function toMsFeatureFlagValue(value) {
121
125
  const parsedJson = JSON.parse(value);
122
- return {
126
+ const msFeatureFlagValue = {
123
127
  id: parsedJson.id,
124
128
  enabled: parsedJson.enabled,
125
129
  description: parsedJson.description,
126
130
  conditions: isEmpty(parsedJson.conditions) ? { clientFilters: [] } : { clientFilters: parsedJson.conditions.client_filters }
127
131
  };
132
+ if (parsedJson.allocation) {
133
+ msFeatureFlagValue.allocation = parsedJson.allocation;
134
+ }
135
+ if (parsedJson.variants) {
136
+ msFeatureFlagValue.variants = parsedJson.variants;
137
+ }
138
+ if (parsedJson.telemetry) {
139
+ msFeatureFlagValue.telemetry = parsedJson.telemetry;
140
+ }
141
+ return msFeatureFlagValue;
142
+ }
143
+ export function serializeFeatureFlagValue(featureFlagValue) {
144
+ var _a;
145
+ if (!featureFlagValue) {
146
+ throw new TypeError("Invalid feature flag value");
147
+ }
148
+ const jsonFeatureFlagValue = {
149
+ id: featureFlagValue.id,
150
+ enabled: featureFlagValue.enabled,
151
+ description: featureFlagValue.description,
152
+ conditions: {
153
+ client_filters: (_a = featureFlagValue.conditions) === null || _a === void 0 ? void 0 : _a.clientFilters
154
+ },
155
+ display_name: featureFlagValue.displayName
156
+ };
157
+ if (featureFlagValue.conditions && featureFlagValue.conditions.requirementType) {
158
+ jsonFeatureFlagValue.conditions.requirement_type = featureFlagValue.conditions.requirementType;
159
+ }
160
+ if (featureFlagValue.allocation) {
161
+ jsonFeatureFlagValue.allocation = featureFlagValue.allocation;
162
+ }
163
+ if (featureFlagValue.variants) {
164
+ jsonFeatureFlagValue.variants = featureFlagValue.variants;
165
+ }
166
+ if (featureFlagValue.telemetry) {
167
+ jsonFeatureFlagValue.telemetry = featureFlagValue.telemetry;
168
+ }
169
+ return JSON.stringify(jsonFeatureFlagValue);
128
170
  }
129
171
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/internal/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { \n ConfigurationSetting, \n SetConfigurationSettingParam, \n FeatureFlagValue,\n featureFlagContentType,\n SecretReferenceValue } from \"@azure/app-configuration\";\nimport { isEmpty, isEqual } from \"lodash\";\nimport { Tags, FeatureFlagClientFilters } from \"../models\";\nimport { SourceOptions } from \"../importOptions\";\nimport { ConfigurationFormat, ConfigurationProfile } from \"../enums\";\nimport { ArgumentError, ArgumentNullError } from \"../errors\";\nimport { Constants } from \"../internal/constants\";\n\n/** @internal*/\nexport function isJsonContentType(contentType?: string): boolean {\n if (!contentType) {\n return false;\n }\n\n contentType = contentType.trim().toLowerCase();\n const mineType = contentType.split(\";\")[0].trim();\n const typeParts = mineType.split(\"/\");\n if (typeParts.length != 2) {\n return false;\n }\n\n if (typeParts[0] != \"application\") {\n return false;\n }\n\n const subTypes = typeParts[1].split(\"+\");\n if (subTypes[subTypes.length-1] == \"json\") {\n return true;\n }\n\n return false;\n}\n\n/** @internal*/\nexport function isConfigSettingEqual(settingA: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>, settingB: ConfigurationSetting) {\n let valueIsEqual: boolean = settingA.value == settingB.value;\n \n if (settingA.contentType == featureFlagContentType &&\n settingB.contentType == featureFlagContentType && \n settingA.value !== undefined && \n settingB.value !== undefined) {\n valueIsEqual = isFeatureFlagValueEqual(settingA.value as string | FeatureFlagValue, settingB.value);\n }\n\n return valueIsEqual &&\n settingA.contentType == settingB.contentType &&\n areTagsEqual(settingA.tags, settingB.tags);\n}\n\n/** @internal*/\nexport function areTagsEqual(tagA?: Tags, tagB?: Tags): boolean {\n if (isEmpty(tagA) || isEmpty(tagB)) {\n return isEmpty(tagA) && isEmpty(tagB);\n }\n\n if (Object.keys(tagA).length !== Object.keys(tagB).length) {\n return false;\n }\n\n for(const key in tagA) {\n if (tagA[key] !== tagB[key]) {\n return false;\n }\n }\n return true;\n}\n\n/** @internal*/\n/**\n * Validate the ConfigurationSyncOptions argument, throw fatal error if options are not valid.\n *\n * @param options - ConfigurationSyncOptions to be validated.\n */\nexport function validateOptions(options: SourceOptions): void {\n if (!options) {\n throw new ArgumentNullError();\n }\n\n if (options.profile == ConfigurationProfile.KvSet) {\n if (\n options.prefix ||\n options.separator ||\n options.label ||\n options.depth ||\n options.tags ||\n options.contentType\n ) {\n throw new ArgumentError(\n \"The option label, prefix, depth, contentType, tags and separator are not supported when importing using 'appconfig/kvset' profile\"\n );\n }\n\n if (options.format !== ConfigurationFormat.Json) {\n throw new ArgumentError(\n \"Yaml and Properties formats are not supported for appconfig/kvset profile. Supported value is: Json\"\n );\n }\n }\n\n if (options.depth && options.depth > 1 && !options.separator) {\n throw new ArgumentError(\n \"Separator must be specified if Depth is default value or set a value lager than 1\"\n );\n }\n\n if (options.separator && !Constants.Separators.includes(options.separator)) {\n throw new ArgumentError(`${options.separator} is not a supported separator.`);\n }\n\n if (!options.separator && !options.depth) {\n options.depth = 1;\n }\n\n if (options.format !== ConfigurationFormat.Json && isJsonContentType(options.contentType)) {\n throw new ArgumentError(`Failed to import '${ConfigurationFormat[options.format]}' data format with '${options.contentType}' content type. Please provide data in JSON format to match your content type.`);\n }\n}\n\nfunction isFeatureFlagValueEqual(valueA: string | FeatureFlagValue, valueB: string): boolean {\n let featureFlagAValue: FeatureFlagValue;\n\n if (typeof valueA == \"string\") {\n featureFlagAValue = toFeatureFlagValue(valueA);\n }\n else {\n featureFlagAValue = valueA;\n }\n\n const featureFlagBValue: FeatureFlagValue = toFeatureFlagValue(valueB);\n\n if (Object.keys(featureFlagAValue).length !== Object.keys(featureFlagBValue).length) {\n return false;\n }\n\n return featureFlagAValue.id == featureFlagBValue.id &&\n featureFlagAValue.enabled == featureFlagBValue.enabled &&\n featureFlagAValue.description == featureFlagBValue.description &&\n areFeatureFlagFiltersEqual(featureFlagAValue.conditions.clientFilters, featureFlagBValue.conditions.clientFilters);\n}\n\nfunction areFeatureFlagFiltersEqual(filterA: FeatureFlagClientFilters[], filterB: FeatureFlagClientFilters[]): boolean {\n if (filterA.length !== filterB.length) {\n return false;\n }\n\n for (let i = 0; i < filterA.length; i++) {\n if (!isEqual(filterA[i], filterB[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction toFeatureFlagValue(value: string): FeatureFlagValue {\n const parsedJson: any = JSON.parse(value);\n\n return {\n id: parsedJson.id,\n enabled: parsedJson.enabled,\n description:parsedJson.description,\n conditions: isEmpty(parsedJson.conditions) ? {clientFilters: []} : {clientFilters: parsedJson.conditions.client_filters}\n };\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/internal/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { \n ConfigurationSetting, \n SetConfigurationSettingParam, \n FeatureFlagValue,\n featureFlagContentType,\n SecretReferenceValue } from \"@azure/app-configuration\";\nimport { isEmpty, isEqual } from \"lodash\";\nimport { Tags, FeatureFlagClientFilters } from \"../models\";\nimport { SourceOptions } from \"../importOptions\";\nimport { ConfigurationFormat, ConfigurationProfile } from \"../enums\";\nimport { ArgumentError, ArgumentNullError } from \"../errors\";\nimport { Constants } from \"../internal/constants\";\nimport { MsFeatureFlagValue, Variant } from \"../featureFlag\";\n\n/** @internal*/\nexport function isJsonContentType(contentType?: string): boolean {\n if (!contentType) {\n return false;\n }\n\n contentType = contentType.trim().toLowerCase();\n const mineType = contentType.split(\";\")[0].trim();\n const typeParts = mineType.split(\"/\");\n if (typeParts.length != 2) {\n return false;\n }\n\n if (typeParts[0] != \"application\") {\n return false;\n }\n\n const subTypes = typeParts[1].split(\"+\");\n if (subTypes[subTypes.length-1] == \"json\") {\n return true;\n }\n\n return false;\n}\n\n/** @internal*/\nexport function isConfigSettingEqual(settingA: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>, settingB: ConfigurationSetting) {\n let valueIsEqual: boolean = settingA.value == settingB.value;\n \n if (settingA.contentType == featureFlagContentType &&\n settingB.contentType == featureFlagContentType && \n settingA.value !== undefined && \n settingB.value !== undefined) {\n valueIsEqual = isFeatureFlagValueEqual(settingA.value as string | FeatureFlagValue, settingB.value);\n }\n\n return valueIsEqual &&\n settingA.contentType == settingB.contentType &&\n areTagsEqual(settingA.tags, settingB.tags);\n}\n\n/** @internal*/\nexport function areTagsEqual(tagA?: Tags, tagB?: Tags): boolean {\n if (isEmpty(tagA) || isEmpty(tagB)) {\n return isEmpty(tagA) && isEmpty(tagB);\n }\n\n if (Object.keys(tagA).length !== Object.keys(tagB).length) {\n return false;\n }\n\n for(const key in tagA) {\n if (tagA[key] !== tagB[key]) {\n return false;\n }\n }\n return true;\n}\n\n/** @internal*/\n/**\n * Validate the ConfigurationSyncOptions argument, throw fatal error if options are not valid.\n *\n * @param options - ConfigurationSyncOptions to be validated.\n */\nexport function validateOptions(options: SourceOptions): void {\n if (!options) {\n throw new ArgumentNullError();\n }\n\n if (options.profile == ConfigurationProfile.KvSet) {\n if (\n options.prefix ||\n options.separator ||\n options.label ||\n options.depth ||\n options.tags ||\n options.contentType\n ) {\n throw new ArgumentError(\n \"The option label, prefix, depth, contentType, tags and separator are not supported when importing using 'appconfig/kvset' profile\"\n );\n }\n\n if (options.format !== ConfigurationFormat.Json) {\n throw new ArgumentError(\n \"Yaml and Properties formats are not supported for appconfig/kvset profile. Supported value is: Json\"\n );\n }\n }\n\n if (options.depth && options.depth > 1 && !options.separator) {\n throw new ArgumentError(\n \"Separator must be specified if Depth is default value or set a value lager than 1\"\n );\n }\n\n if (options.separator && !Constants.Separators.includes(options.separator)) {\n throw new ArgumentError(`${options.separator} is not a supported separator.`);\n }\n\n if (!options.separator && !options.depth) {\n options.depth = 1;\n }\n\n if (options.format !== ConfigurationFormat.Json && isJsonContentType(options.contentType)) {\n throw new ArgumentError(`Failed to import '${ConfigurationFormat[options.format]}' data format with '${options.contentType}' content type. Please provide data in JSON format to match your content type.`);\n }\n}\n\nfunction isFeatureFlagValueEqual(valueA: string | MsFeatureFlagValue, valueB: string): boolean {\n let featureFlagAValue: MsFeatureFlagValue;\n\n if (typeof valueA == \"string\") {\n featureFlagAValue = toMsFeatureFlagValue(valueA);\n }\n else {\n featureFlagAValue = valueA as MsFeatureFlagValue;\n }\n\n const featureFlagBValue: MsFeatureFlagValue = toMsFeatureFlagValue(valueB);\n\n if (Object.keys(featureFlagAValue).length !== Object.keys(featureFlagBValue).length) {\n return false;\n }\n\n return featureFlagAValue.id == featureFlagBValue.id &&\n featureFlagAValue.enabled == featureFlagBValue.enabled &&\n featureFlagAValue.description == featureFlagBValue.description &&\n areArrayEqual<FeatureFlagClientFilters>(featureFlagAValue.conditions.clientFilters, featureFlagBValue.conditions.clientFilters) &&\n isEqual(featureFlagAValue.allocation, featureFlagBValue.allocation) &&\n areArrayEqual<Variant>(featureFlagAValue.variants ?? [], featureFlagBValue.variants ?? []) &&\n isEqual(featureFlagAValue.telemetry, featureFlagBValue.telemetry);\n}\n\nfunction areArrayEqual<T>(arrayA: T[], arrayB: T[]): boolean {\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n\n for (let i = 0; i < arrayA.length; i++) {\n if (!isEqual(arrayA[i], arrayB[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction toMsFeatureFlagValue(value: string): MsFeatureFlagValue {\n const parsedJson: any = JSON.parse(value);\n\n const msFeatureFlagValue: MsFeatureFlagValue = {\n id: parsedJson.id,\n enabled: parsedJson.enabled,\n description:parsedJson.description,\n conditions: isEmpty(parsedJson.conditions) ? {clientFilters: []} : {clientFilters: parsedJson.conditions.client_filters}\n };\n \n if (parsedJson.allocation) {\n msFeatureFlagValue.allocation = parsedJson.allocation;\n }\n\n if (parsedJson.variants) {\n msFeatureFlagValue.variants = parsedJson.variants;\n }\n\n if (parsedJson.telemetry) {\n msFeatureFlagValue.telemetry = parsedJson.telemetry;\n }\n\n return msFeatureFlagValue;\n}\n\nexport function serializeFeatureFlagValue(featureFlagValue: MsFeatureFlagValue): string {\n if (!featureFlagValue) {\n throw new TypeError(\"Invalid feature flag value\");\n }\n\n const jsonFeatureFlagValue: any = {\n id: featureFlagValue.id,\n enabled: featureFlagValue.enabled,\n description: featureFlagValue.description,\n conditions: {\n client_filters: featureFlagValue.conditions?.clientFilters\n },\n display_name: featureFlagValue.displayName\n };\n\n if (featureFlagValue.conditions && featureFlagValue.conditions.requirementType) {\n jsonFeatureFlagValue.conditions.requirement_type = featureFlagValue.conditions.requirementType;\n }\n\n if (featureFlagValue.allocation) {\n jsonFeatureFlagValue.allocation = featureFlagValue.allocation;\n }\n\n if (featureFlagValue.variants) {\n jsonFeatureFlagValue.variants = featureFlagValue.variants;\n }\n\n if (featureFlagValue.telemetry) {\n jsonFeatureFlagValue.telemetry = featureFlagValue.telemetry;\n }\n\n return JSON.stringify(jsonFeatureFlagValue);\n}\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@azure/app-configuration-importer",
3
3
  "author": "Microsoft Corporation",
4
4
  "description": "A client library for importing/exporting key-values between configuration sources and Azure App Configuration service",
5
- "version": "1.1.0-preview",
5
+ "version": "1.1.2-preview",
6
6
  "sdk-type": "client",
7
7
  "keywords": [
8
8
  "node",
@@ -1,7 +1,6 @@
1
1
  import { SetConfigurationSettingParam, SecretReferenceValue } from "@azure/app-configuration";
2
2
  import { SourceOptions } from "../../importOptions";
3
3
  import { ConfigurationSettingsConverter } from "./configurationSettingsConverter";
4
- import { MsFeatureFlagValue } from "../../featureFlag";
5
4
  /**
6
5
  * Format Parser for common key-value configuration.
7
6
  *
@@ -14,7 +13,7 @@ export declare class DefaultConfigurationSettingsConverter implements Configurat
14
13
  * @param config Raw configuration object
15
14
  * @param options Configuration options to dictate how the configuration be parsed.
16
15
  * */
17
- Convert(config: object, options: SourceOptions): SetConfigurationSettingParam<string | MsFeatureFlagValue | SecretReferenceValue>[];
16
+ Convert(config: object, options: SourceOptions): SetConfigurationSettingParam<string | SecretReferenceValue>[];
18
17
  private checkFeatureManagementExist;
19
18
  private toConfigurationSettings;
20
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"defaultConfigurationSettingsConverter.d.ts","sourceRoot":"","sources":["../../../../src/internal/parsers/defaultConfigurationSettingsConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EAGrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAMlF,OAAO,EAAE,kBAAkB,EAAmB,MAAM,mBAAmB,CAAC;AAKxE;;;;KAIK;AACL,qBAAa,qCAAsC,YAAW,8BAA8B;IAC1F;;;;;SAKK;IACE,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,4BAA4B,CAAC,MAAM,GAAG,kBAAkB,GAAG,oBAAoB,CAAC,EAAE;IA2ErF,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,uBAAuB;CAyChC"}
1
+ {"version":3,"file":"defaultConfigurationSettingsConverter.d.ts","sourceRoot":"","sources":["../../../../src/internal/parsers/defaultConfigurationSettingsConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,4BAA4B,EAG5B,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAWlF;;;;KAIK;AACL,qBAAa,qCAAsC,YAAW,8BAA8B;IAC1F;;;;;SAKK;IACE,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,4BAA4B,CAAC,MAAM,GAAG,oBAAoB,CAAC,EAAE;IA2EhE,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,uBAAuB;CAyChC"}
@@ -1,6 +1,7 @@
1
1
  import { ConfigurationSetting, SetConfigurationSettingParam, FeatureFlagValue, SecretReferenceValue } from "@azure/app-configuration";
2
2
  import { Tags } from "../models";
3
3
  import { SourceOptions } from "../importOptions";
4
+ import { MsFeatureFlagValue } from "../featureFlag";
4
5
  /** @internal*/
5
6
  export declare function isJsonContentType(contentType?: string): boolean;
6
7
  /** @internal*/
@@ -14,4 +15,5 @@ export declare function areTagsEqual(tagA?: Tags, tagB?: Tags): boolean;
14
15
  * @param options - ConfigurationSyncOptions to be validated.
15
16
  */
16
17
  export declare function validateOptions(options: SourceOptions): void;
18
+ export declare function serializeFeatureFlagValue(featureFlagValue: MsFeatureFlagValue): string;
17
19
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/internal/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAEhB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,IAAI,EAA4B,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,eAAe;AACf,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAsB/D;AAED,eAAe;AACf,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,4BAA4B,CAAC,MAAM,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,oBAAoB,WAa5J;AAED,eAAe;AACf,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAe9D;AAED,eAAe;AACf;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CA2C5D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/internal/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EAEhB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,IAAI,EAA4B,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAE,kBAAkB,EAAW,MAAM,gBAAgB,CAAC;AAE7D,eAAe;AACf,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAsB/D;AAED,eAAe;AACf,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,4BAA4B,CAAC,MAAM,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,oBAAoB,WAa5J;AAED,eAAe;AACf,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAe9D;AAED,eAAe;AACf;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CA2C5D;AAiED,wBAAgB,yBAAyB,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,MAAM,CAgCtF"}