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
JavaScript
;
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;