UNPKG

sikits

Version:

A powerful and comprehensive utility library for JavaScript and TypeScript with 100+ functions for strings, numbers, arrays, and objects

77 lines (76 loc) 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapValues = exports.mapKeys = exports.findDeepKey = exports.unflattenObject = exports.flattenObject = exports.deepFreeze = exports.fromQueryString = exports.toQueryString = exports.omit = exports.pick = exports.setNestedValue = exports.getNestedValue = exports.isEmptyObject = exports.mergeObjects = exports.deepClone = void 0; const deepClone = (obj) => JSON.parse(JSON.stringify(obj)); exports.deepClone = deepClone; const mergeObjects = (obj1, obj2) => (Object.assign(Object.assign({}, obj1), obj2)); exports.mergeObjects = mergeObjects; const isEmptyObject = (obj) => Object.keys(obj).length === 0; exports.isEmptyObject = isEmptyObject; const getNestedValue = (obj, key) => obj[key]; exports.getNestedValue = getNestedValue; const setNestedValue = (obj, path, value) => { const keys = path.split("."); let current = obj; while (keys.length > 1) { const key = keys.shift(); current[key] = current[key] || {}; current = current[key]; } current[keys[0]] = value; }; exports.setNestedValue = setNestedValue; const pick = (obj, keys) => keys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: obj[key] })), {}); exports.pick = pick; const omit = (obj, keys) => Object.keys(obj).reduce((acc, key) => keys.includes(key) ? acc : Object.assign(Object.assign({}, acc), { [key]: obj[key] }), {}); exports.omit = omit; const toQueryString = (obj) => Object.entries(obj) .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`) .join("&"); exports.toQueryString = toQueryString; const fromQueryString = (query) => Object.fromEntries(new URLSearchParams(query)); exports.fromQueryString = fromQueryString; const deepFreeze = (obj) => { Object.freeze(obj); Object.getOwnPropertyNames(obj).forEach((prop) => { const value = obj[prop]; if (typeof value === "object" && value !== null) { (0, exports.deepFreeze)(value); } }); return obj; }; exports.deepFreeze = deepFreeze; const flattenObject = (obj, prefix = "") => Object.entries(obj).reduce((acc, [key, value]) => { const newKey = prefix ? `${prefix}.${key}` : key; if (typeof value === "object" && value !== null && !Array.isArray(value)) { Object.assign(acc, (0, exports.flattenObject)(value, newKey)); } else { acc[newKey] = value; } return acc; }, {}); exports.flattenObject = flattenObject; const unflattenObject = (obj) => Object.entries(obj).reduce((acc, [key, value]) => { (0, exports.setNestedValue)(acc, key, value); return acc; }, {}); exports.unflattenObject = unflattenObject; const findDeepKey = (obj, targetKey) => { if (obj && typeof obj === "object") { for (const key in obj) { if (key === targetKey) return obj[key]; const found = (0, exports.findDeepKey)(obj[key], targetKey); if (found !== undefined) return found; } } return undefined; }; exports.findDeepKey = findDeepKey; const mapKeys = (obj, fn) => Object.fromEntries(Object.entries(obj).map(([key, value]) => [fn(key), value])); exports.mapKeys = mapKeys; const mapValues = (obj, fn) => Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, fn(value)])); exports.mapValues = mapValues;