UNPKG

@usebruno/converters

Version:

The converters package is responsible for converting collections from one format to a Bruno collection. It can be used as a standalone package or as a part of the Bruno framework.

52 lines (45 loc) 1.76 kB
// Adapted from flat library by Hugh Kennedy (https://github.com/hughsk/flat) // MIT License /** * Recursively flattens a nested object or array into a flat object with JavaScript-style keys. * Arrays use square bracket notation (e.g., items[0].id). * Only primitives and null are included as values. * * @param {object|array} obj - The object or array to flatten. * @param {string} [prefix] - Used internally for recursion to build the path. * @returns {object} A flat object with JavaScript-style keys. */ function flattenObject(obj, prefix = '') { // Store the final flat result const result = {}; /** * Internal recursive function to process each value. * @param {*} value - The current value (can be object, array, primitive, or null) * @param {string} path - The JavaScript-style key up to this point */ function step(value, path) { // If value is a primitive (string, number, boolean) or null, add it to the result if (value === null || typeof value !== 'object') { result[path] = value; return; } // If value is an array, iterate over each item by index if (Array.isArray(value)) { value.forEach((item, idx) => { // Build the next path with array index using square brackets (e.g. "items[0]") step(item, path ? `${path}[${idx}]` : `[${idx}]`); }); } else { // If value is an object, iterate over its keys Object.entries(value).forEach(([key, val]) => { // Build the next path with object key (e.g. "user.name") step(val, path ? `${path}.${key}` : key); }); } } // Start recursive flattening from the root object step(obj, prefix); // Return the flat result object return result; } export { flattenObject };