Files
JiaZhiQianYan/node_modules/@posthog/core/dist/featureFlagUtils.js

169 lines
6.4 KiB
JavaScript

"use strict";
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, definition)=>{
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
get: definition[key]
});
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
createFlagsResponseFromFlagsAndPayloads: ()=>createFlagsResponseFromFlagsAndPayloads,
getFeatureFlagValue: ()=>getFeatureFlagValue,
getFlagDetailsFromFlagsAndPayloads: ()=>getFlagDetailsFromFlagsAndPayloads,
getFlagValuesFromFlags: ()=>getFlagValuesFromFlags,
getPayloadsFromFlags: ()=>getPayloadsFromFlags,
normalizeFlagsResponse: ()=>normalizeFlagsResponse,
parsePayload: ()=>parsePayload,
updateFlagValue: ()=>updateFlagValue
});
const normalizeFlagsResponse = (flagsResponse)=>{
if ('flags' in flagsResponse) {
const featureFlags = getFlagValuesFromFlags(flagsResponse.flags);
const featureFlagPayloads = getPayloadsFromFlags(flagsResponse.flags);
return {
...flagsResponse,
featureFlags,
featureFlagPayloads
};
}
{
const featureFlags = flagsResponse.featureFlags ?? {};
const featureFlagPayloads = Object.fromEntries(Object.entries(flagsResponse.featureFlagPayloads || {}).map(([k, v])=>[
k,
parsePayload(v)
]));
const flags = Object.fromEntries(Object.entries(featureFlags).map(([key, value])=>[
key,
getFlagDetailFromFlagAndPayload(key, value, featureFlagPayloads[key])
]));
return {
...flagsResponse,
featureFlags,
featureFlagPayloads,
flags
};
}
};
function getFlagDetailFromFlagAndPayload(key, value, payload) {
return {
key: key,
enabled: 'string' == typeof value ? true : value,
variant: 'string' == typeof value ? value : void 0,
reason: void 0,
metadata: {
id: void 0,
version: void 0,
payload: payload ? JSON.stringify(payload) : void 0,
description: void 0
}
};
}
const getFlagValuesFromFlags = (flags)=>Object.fromEntries(Object.entries(flags ?? {}).map(([key, detail])=>[
key,
getFeatureFlagValue(detail)
]).filter(([, value])=>void 0 !== value));
const getPayloadsFromFlags = (flags)=>{
const safeFlags = flags ?? {};
return Object.fromEntries(Object.keys(safeFlags).filter((flag)=>{
const details = safeFlags[flag];
return details.enabled && details.metadata && void 0 !== details.metadata.payload;
}).map((flag)=>{
const payload = safeFlags[flag].metadata?.payload;
return [
flag,
payload ? parsePayload(payload) : void 0
];
}));
};
const getFlagDetailsFromFlagsAndPayloads = (flagsResponse)=>{
const flags = flagsResponse.featureFlags ?? {};
const payloads = flagsResponse.featureFlagPayloads ?? {};
return Object.fromEntries(Object.entries(flags).map(([key, value])=>[
key,
{
key: key,
enabled: 'string' == typeof value ? true : value,
variant: 'string' == typeof value ? value : void 0,
reason: void 0,
metadata: {
id: void 0,
version: void 0,
payload: payloads?.[key] ? JSON.stringify(payloads[key]) : void 0,
description: void 0
}
}
]));
};
const getFeatureFlagValue = (detail)=>void 0 === detail ? void 0 : detail.variant ?? detail.enabled;
const parsePayload = (response)=>{
if ('string' != typeof response) return response;
try {
return JSON.parse(response);
} catch {
return response;
}
};
const createFlagsResponseFromFlagsAndPayloads = (featureFlags, featureFlagPayloads)=>{
const allKeys = [
...new Set([
...Object.keys(featureFlags ?? {}),
...Object.keys(featureFlagPayloads ?? {})
])
];
const enabledFlags = allKeys.filter((flag)=>!!featureFlags[flag] || !!featureFlagPayloads[flag]).reduce((res, key)=>(res[key] = featureFlags[key] ?? true, res), {});
const flagDetails = {
featureFlags: enabledFlags,
featureFlagPayloads: featureFlagPayloads ?? {}
};
return normalizeFlagsResponse(flagDetails);
};
const updateFlagValue = (flag, value)=>({
...flag,
enabled: getEnabledFromValue(value),
variant: getVariantFromValue(value)
});
function getEnabledFromValue(value) {
return 'string' == typeof value ? true : value;
}
function getVariantFromValue(value) {
return 'string' == typeof value ? value : void 0;
}
exports.createFlagsResponseFromFlagsAndPayloads = __webpack_exports__.createFlagsResponseFromFlagsAndPayloads;
exports.getFeatureFlagValue = __webpack_exports__.getFeatureFlagValue;
exports.getFlagDetailsFromFlagsAndPayloads = __webpack_exports__.getFlagDetailsFromFlagsAndPayloads;
exports.getFlagValuesFromFlags = __webpack_exports__.getFlagValuesFromFlags;
exports.getPayloadsFromFlags = __webpack_exports__.getPayloadsFromFlags;
exports.normalizeFlagsResponse = __webpack_exports__.normalizeFlagsResponse;
exports.parsePayload = __webpack_exports__.parsePayload;
exports.updateFlagValue = __webpack_exports__.updateFlagValue;
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
"createFlagsResponseFromFlagsAndPayloads",
"getFeatureFlagValue",
"getFlagDetailsFromFlagsAndPayloads",
"getFlagValuesFromFlags",
"getPayloadsFromFlags",
"normalizeFlagsResponse",
"parsePayload",
"updateFlagValue"
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
Object.defineProperty(exports, '__esModule', {
value: true
});