@rzl-zone/utils-js
Version:
A modern, lightweight set of JavaScript utility functions with TypeScript support for everyday development, crafted to enhance code readability and maintainability.
114 lines (108 loc) • 4.13 kB
JavaScript
/*!
* ====================================================
* Rzl Utils-JS.
* ----------------------------------------------------
* Version: 3.11.0.
* Author: Rizalvin Dwiky.
* Repository: https://github.com/rzl-zone/utils-js.
* ====================================================
*/
;
var chunkK5536YHG_cjs = require('./chunk-K5536YHG.cjs');
var chunkGIKL4PUF_cjs = require('./chunk-GIKL4PUF.cjs');
var chunk7FGNVDEV_cjs = require('./chunk-7FGNVDEV.cjs');
var chunkDLS3G6WQ_cjs = require('./chunk-DLS3G6WQ.cjs');
var chunkDAPAK2W3_cjs = require('./chunk-DAPAK2W3.cjs');
var chunkSYHPSOUU_cjs = require('./chunk-SYHPSOUU.cjs');
var findDuplicates = (values) => {
chunkDLS3G6WQ_cjs.assertIsArray(values, {
message: ({ currentType, validType }) => `First parameter (\`values\`) must be of type \`${validType}\` (array literal or instance), but received: \`${currentType}\`.`
});
const duplicates = [];
values.forEach((item, index) => {
for (let i = index + 1; i < values.length; i++) {
if (chunkGIKL4PUF_cjs.isEqual(item, values[i])) {
if (!duplicates.some((dup) => chunkGIKL4PUF_cjs.isEqual(dup, item))) {
duplicates.push(item);
}
break;
}
}
});
return duplicates;
};
var omitKeys = (object, keysToOmit) => {
if (!chunkSYHPSOUU_cjs.isPlainObject(object)) return {};
chunkDLS3G6WQ_cjs.assertIsArray(keysToOmit, {
message: ({ currentType, validType }) => `Second parameter (\`keysToOmit\`) must be of type \`${validType}\` (array literal or instance), but received: \`${currentType}\`.`
});
const duplicates = findDuplicates(keysToOmit);
if (duplicates.length > 0) {
throw new Error(
`Function "omitKeys" Error: Duplicate keys detected - \`${duplicates}\``
);
}
return Object.fromEntries(
Object.entries(object).filter(([key]) => !keysToOmit.includes(key))
);
};
var omitKeysDeep = (object, keysToOmit) => {
if (!chunkSYHPSOUU_cjs.isPlainObject(object)) return {};
chunkDLS3G6WQ_cjs.assertIsArray(keysToOmit, {
message: ({ currentType, validType }) => `Second parameter (\`keysToOmit\`) must be of type \`${validType}\` (array literal or instance), but received: \`${currentType}\`.`
});
const duplicates = findDuplicates(keysToOmit);
if (chunkSYHPSOUU_cjs.isNonEmptyArray(duplicates)) {
throw new Error(
`Function "omitKeysDeep" Error: Duplicate keys detected - \`${chunkDAPAK2W3_cjs.safeStableStringify(
duplicates,
{
keepUndefined: true
}
)}\`.`
);
}
const omitAtPath = (obj, pathParts) => {
if (!chunkSYHPSOUU_cjs.isObjectOrArray(obj)) return obj;
const [current, ...rest] = pathParts;
if (chunk7FGNVDEV_cjs.isEmptyArray(rest)) {
if (chunkSYHPSOUU_cjs.isArray(obj)) {
const index = parseInt(current);
if (!chunkSYHPSOUU_cjs.isNaN(index) && index in obj) {
obj.splice(index, 1);
}
} else {
delete obj[current];
}
} else {
const next = obj[current];
if (chunkSYHPSOUU_cjs.isObjectOrArray(next)) {
obj[current] = omitAtPath(next, rest);
}
}
return obj;
};
const deepRemoveEmptyObjects = (obj) => {
if (chunkSYHPSOUU_cjs.isArray(obj)) {
return obj.map(deepRemoveEmptyObjects).filter((item) => !(chunkSYHPSOUU_cjs.isObjectOrArray(item) && Object.keys(item).length === 0));
}
if (chunkSYHPSOUU_cjs.isObjectOrArray(obj)) {
const cleaned = Object.fromEntries(
Object.entries(obj).map(([k, v]) => [k, deepRemoveEmptyObjects(v)]).filter(
([, v]) => !chunkSYHPSOUU_cjs.isUndefined(v) && !(chunkSYHPSOUU_cjs.isObjectOrArray(v) && Object.keys(v).length === 0)
)
);
return cleaned;
}
return obj;
};
const result = chunkK5536YHG_cjs.safeJsonParse(chunkDAPAK2W3_cjs.safeStableStringify(object));
for (const key of keysToOmit) {
const parts = key.split(".");
omitAtPath(result, parts);
}
return deepRemoveEmptyObjects(result);
};
exports.findDuplicates = findDuplicates;
exports.omitKeys = omitKeys;
exports.omitKeysDeep = omitKeysDeep;