function getKeys(obj = {}, flag = false, oldPath = '', allKeys = [], allGroups = []) {
    let isValue = true;
    Object.keys(obj).forEach((key) => {
        const value = obj[key];
        const newPath = oldPath + key;

        if (isPlainObject(value) && key !== RAW && key !== '__meta') {
            isValue = true;
            if (newPath !== 'settings') {
                allGroups.push(true);
                allKeys.push(newPath);
            }
            const keys = getKeys(value, flag, `${newPath}.`, allKeys, allGroups);
            // If nothing was changed we where in a value, not a group
            if (keys.value) {
                allGroups[allGroups.length - 1] = false;
            }
        } else if (flag && key !== '__meta') {
            allKeys.push(newPath);
            allGroups.push(false);
        }
    });

    return {
        paths: allKeys,
        groups: allGroups,
        value: isValue,
    };
}
function getKeys(obj = {}, flag = false, oldPath = '', allKeys = [], allGroups = []) {
    let isValue = true;
    Object.keys(obj).forEach((key) => {
        const value = obj[key];
        const newPath = oldPath + key;

        if (isPlainObject(value) && key !== RAW && key !== '__meta') {
            isValue = true;
            if (newPath !== 'settings') {
                allGroups.push(true);
                allKeys.push(newPath);
            }
            const keys = getKeys(value, flag, `${newPath}.`, allKeys, allGroups);
            
            if (keys.value) {
                allGroups[allGroups.length - 1] = false;
            }
        } else if (flag && key !== '__meta') {
            allKeys.push(newPath);
            allGroups.push(false);
        }
    });

    return {
        paths: allKeys,
        groups: allGroups,
        value: isValue,
    };
}
function getKeys ( obj = { } , flag = false , oldPath = '' , allKeys = [ ] , allGroups = [ ] ) { let isValue = true ; Object . keys ( obj ) . forEach ( ( key ) => { const value = obj [ key ] ; const newPath = oldPath + key ; if ( isPlainObject ( value ) && key !== RAW && key !== '__meta' ) { isValue = true ; if ( newPath !== 'settings' ) { allGroups . push ( true ) ; allKeys . push ( newPath ) ; } const keys = getKeys ( value , flag , ` ${ newPath } ` , allKeys , allGroups ) ; // If nothing was changed we where in a value, not a group if ( keys . value ) { allGroups [ allGroups . length - 1 ] = false ; } } else if ( flag && key !== '__meta' ) { allKeys . push ( newPath ) ; allGroups . push ( false ) ; } } ) ; return { paths : allKeys , groups : allGroups , value : isValue , } ; }
/* eslint-disable no-param-reassign
/ * eslint - disable no - param - reassign