UNPKG

@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
/*! * ==================================================== * Rzl Utils-JS. * ---------------------------------------------------- * Version: 3.11.0. * Author: Rizalvin Dwiky. * Repository: https://github.com/rzl-zone/utils-js. * ==================================================== */ 'use strict'; 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;