private getFeatureFlagValueFromMsFmSchema()

in libraries/azure-app-configuration-importer/src/internal/parsers/defaultConfigurationSettingsConverter.ts [357:390]


  private getFeatureFlagValueFromMsFmSchema(featureFlag: any): MsFeatureFlagValue {
    const validate = this.ajv.compile<MsFeatureFlagValue>(MsFeatureFlagValueSchema);
    const featureFlagCopy = JSON.parse(JSON.stringify(featureFlag)); //deep copy

    // normalize client filters
    if (featureFlagCopy.conditions && featureFlagCopy.conditions.client_filters) {
      for (let i = 0; i < featureFlagCopy.conditions.client_filters.length; i++) {
        featureFlagCopy.conditions.client_filters[i] = this.getLowerCaseFilters(featureFlagCopy.conditions.client_filters[i]);
      }
    }

    const valid = validate(featureFlagCopy);
    if (!valid) {
      const validationError = new AjvValidationError(validate.errors as ErrorObject[]);
      throw new ArgumentError(`Feature flag '${featureFlag.id}' is not in the correct format. ${validationError.getFriendlyMessage()}`);
    }

    const parsedFeatureFlag: MsFeatureFlagValue = {
      ...featureFlag,
      conditions: {
        clientFilters: featureFlag.conditions?.client_filters ?? []
      }
    };

    if (featureFlag.display_name) {
      parsedFeatureFlag.displayName = featureFlag.display_name;
    }

    if (featureFlag.conditions?.requirement_type) {
      parsedFeatureFlag.conditions.requirementType = featureFlag.conditions.requirement_type;
    }

    return parsedFeatureFlag;
  }