@azure/app-configuration
Version:
An isomorphic client library for the Azure App Configuration service.
104 lines (103 loc) • 4.16 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var featureFlag_exports = {};
__export(featureFlag_exports, {
FeatureFlagHelper: () => FeatureFlagHelper,
featureFlagContentType: () => featureFlagContentType,
featureFlagPrefix: () => featureFlagPrefix,
isFeatureFlag: () => isFeatureFlag,
parseFeatureFlag: () => parseFeatureFlag
});
module.exports = __toCommonJS(featureFlag_exports);
var import_logger = require("./logger.js");
const featureFlagPrefix = ".appconfig.featureflag/";
const featureFlagContentType = "application/vnd.microsoft.appconfig.ff+json;charset=utf-8";
const FeatureFlagHelper = {
/**
* Takes the FeatureFlag (JSON) and returns a ConfigurationSetting (with the props encodeed in the value).
*/
toConfigurationSettingParam: (featureFlag) => {
import_logger.logger.info("Encoding FeatureFlag value in a ConfigurationSetting:", featureFlag);
if (!featureFlag.value) {
import_logger.logger.error("FeatureFlag has an unexpected value", featureFlag);
throw new TypeError(`FeatureFlag has an unexpected value - ${featureFlag.value}`);
}
let key = featureFlag.key;
if (typeof featureFlag.key === "string" && !featureFlag.key.startsWith(featureFlagPrefix)) {
key = featureFlagPrefix + featureFlag.key;
}
const jsonFeatureFlagValue = {
id: featureFlag.value.id ?? key.replace(featureFlagPrefix, ""),
enabled: featureFlag.value.enabled,
description: featureFlag.value.description,
conditions: {
client_filters: featureFlag.value.conditions.clientFilters,
requirement_type: featureFlag.value.conditions.requirementType ?? "Any"
},
display_name: featureFlag.value.displayName
};
const configSetting = {
...featureFlag,
key,
value: JSON.stringify(jsonFeatureFlagValue)
};
return configSetting;
}
};
function parseFeatureFlag(setting) {
import_logger.logger.info("Parsing the value to return the FeatureFlagValue", setting);
if (!isFeatureFlag(setting)) {
import_logger.logger.error("Invalid FeatureFlag input", setting);
throw TypeError(
`Setting with key ${setting.key} is not a valid FeatureFlag, make sure to have the correct content-type and a valid non-null value.`
);
}
const jsonFeatureFlagValue = JSON.parse(setting.value);
let key = setting.key;
if (typeof setting.key === "string" && !setting.key.startsWith(featureFlagPrefix)) {
key = featureFlagPrefix + setting.key;
}
const featureflag = {
...setting,
value: {
id: jsonFeatureFlagValue.id,
enabled: jsonFeatureFlagValue.enabled ?? false,
description: jsonFeatureFlagValue.description,
displayName: jsonFeatureFlagValue.display_name,
conditions: jsonFeatureFlagValue.conditions ? {
clientFilters: jsonFeatureFlagValue.conditions.client_filters,
requirementType: jsonFeatureFlagValue.conditions.requirement_type
} : { clientFilters: [] }
},
key,
contentType: featureFlagContentType
};
return featureflag;
}
function isFeatureFlag(setting) {
return setting && setting.contentType === featureFlagContentType && typeof setting.value === "string";
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
FeatureFlagHelper,
featureFlagContentType,
featureFlagPrefix,
isFeatureFlag,
parseFeatureFlag
});
//# sourceMappingURL=featureFlag.js.map