mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 23:58:06 +01:00
3732c5f71e
ESLint rules have been added to enforce our JSDoc conventions. These rules were introduced by updating `@metamask/eslint-config` to v9. Some of the rules have been disabled because the effort to fix all lint errors was too high. It might be easiest to enable these rules one directory at a time, or one rule at a time. Most of the changes in this PR were a result of running `yarn lint:fix`. There were a handful of manual changes that seemed obvious and simple to make. Anything beyond that and the rule was left disabled.
48 lines
1.6 KiB
JavaScript
48 lines
1.6 KiB
JavaScript
import { cloneDeep } from 'lodash';
|
|
|
|
// This will create an object that represents the structure of the given object
|
|
// it replaces all values with the result of their type
|
|
|
|
// {
|
|
// "data": {
|
|
// "CurrencyController": {
|
|
// "conversionDate": "number",
|
|
// "conversionRate": "number",
|
|
// "currentCurrency": "string"
|
|
// }
|
|
// }
|
|
|
|
/**
|
|
* Creates an object that represents the structure of the given object. It replaces all values with the result of their
|
|
* type.
|
|
*
|
|
* @param {Object} obj - The object for which a 'structure' will be returned. Usually a plain object and not a class.
|
|
* @returns {Object} The "mapped" version of a deep clone of the passed object, with each non-object property value
|
|
* replaced with the javascript type of that value.
|
|
*/
|
|
export default function getObjStructure(obj) {
|
|
const structure = cloneDeep(obj);
|
|
return deepMap(structure, (value) => {
|
|
return value === null ? 'null' : typeof value;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Modifies all the properties and deeply nested of a passed object. Iterates recursively over all nested objects and
|
|
* their properties, and covers the entire depth of the object. At each property value which is not an object is modified.
|
|
*
|
|
* @param {Object} target - The object to modify
|
|
* @param {Function} visit - The modifier to apply to each non-object property value
|
|
* @returns {Object} The modified object
|
|
*/
|
|
function deepMap(target = {}, visit) {
|
|
Object.entries(target).forEach(([key, value]) => {
|
|
if (typeof value === 'object' && value !== null) {
|
|
target[key] = deepMap(value, visit);
|
|
} else {
|
|
target[key] = visit(value);
|
|
}
|
|
});
|
|
return target;
|
|
}
|