nhb-toolbox
Version:
A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.
42 lines (41 loc) • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cloneObject = cloneObject;
exports.countObjectFields = countObjectFields;
exports.extractObjectKeys = extractObjectKeys;
exports.extractObjectKeysDeep = extractObjectKeysDeep;
const non_primitives_1 = require("../guards/non-primitives");
const index_1 = require("../utils/index");
function cloneObject(obj, serialize = false) {
try {
if (!serialize && typeof structuredClone === 'function') {
return structuredClone(obj);
}
return JSON.parse((0, index_1.stableStringify)(obj));
}
catch {
return { ...obj };
}
}
function countObjectFields(obj) {
if (obj != null)
return Object.keys(obj)?.length;
return 0;
}
function extractObjectKeys(obj, _tuple) {
const keys = (0, non_primitives_1.isNotEmptyObject)(obj) ? Object.keys(obj) : [];
return keys;
}
function extractObjectKeysDeep(obj) {
function _getDeepKeys(candidate) {
let result = [];
for (const key in candidate) {
result.push(key);
if ((0, non_primitives_1.isNotEmptyObject)(candidate[key])) {
result = [...result, ..._getDeepKeys(candidate[key])];
}
}
return result;
}
return ((0, non_primitives_1.isNotEmptyObject)(obj) ? _getDeepKeys(obj) : []);
}