UNPKG

@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
"use strict"; 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); }