@sprucelabs/schema
Version:
Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓
33 lines (32 loc) • 1.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = flattenValues;
function flattenValues(values, ignoreKeys) {
const flattened = flattenValue(values, '', ignoreKeys);
return flattened;
}
function flattenValue(values, prefix = '', ignoreKeys) {
const keys = Object.keys(values);
let flattened = {};
for (const key of keys) {
const value = values[key];
const isWildCardIgnored = ignoreKeys?.includes(`*.${key}`) ?? false;
const dotKey = prefix && !isWildCardIgnored ? `${prefix}.${key}` : key;
if (shouldFlatten(value, ignoreKeys, key)) {
flattened = {
...flattened,
...flattenValue(value, dotKey, ignoreKeys),
};
}
else if (isWildCardIgnored) {
flattened[prefix] = { ...flattened[prefix], [key]: value };
}
else {
flattened[dotKey] = value;
}
}
return flattened;
}
function shouldFlatten(value, ignoreKeys, key) {
return value && typeof value === 'object' && !ignoreKeys?.includes(key);
}