125 lines
3.6 KiB
JavaScript
125 lines
3.6 KiB
JavaScript
'use strict';
|
|
|
|
// src/utils.js
|
|
var SPACE_REGEX = /\s+/g;
|
|
var removeExtraSpaces = (str) => {
|
|
if (typeof str !== "string" || !str) return str;
|
|
return str.replace(SPACE_REGEX, " ").trim();
|
|
};
|
|
var cx = (...classnames) => {
|
|
const classList = [];
|
|
const buildClassString = (input) => {
|
|
if (!input && input !== 0 && input !== 0n) return;
|
|
if (Array.isArray(input)) {
|
|
for (let i = 0, len = input.length; i < len; i++) buildClassString(input[i]);
|
|
return;
|
|
}
|
|
const type = typeof input;
|
|
if (type === "string" || type === "number" || type === "bigint") {
|
|
if (type === "number" && input !== input) return;
|
|
classList.push(String(input));
|
|
} else if (type === "object") {
|
|
const keys = Object.keys(input);
|
|
for (let i = 0, len = keys.length; i < len; i++) {
|
|
const key = keys[i];
|
|
if (input[key]) classList.push(key);
|
|
}
|
|
}
|
|
};
|
|
for (let i = 0, len = classnames.length; i < len; i++) {
|
|
const c = classnames[i];
|
|
if (c !== null && c !== void 0) buildClassString(c);
|
|
}
|
|
return classList.length > 0 ? removeExtraSpaces(classList.join(" ")) : void 0;
|
|
};
|
|
var falsyToString = (value) => value === false ? "false" : value === true ? "true" : value === 0 ? "0" : value;
|
|
var isEmptyObject = (obj) => {
|
|
if (!obj || typeof obj !== "object") return true;
|
|
for (const _ in obj) return false;
|
|
return true;
|
|
};
|
|
var isEqual = (obj1, obj2) => {
|
|
if (obj1 === obj2) return true;
|
|
if (!obj1 || !obj2) return false;
|
|
const keys1 = Object.keys(obj1);
|
|
const keys2 = Object.keys(obj2);
|
|
if (keys1.length !== keys2.length) return false;
|
|
for (let i = 0; i < keys1.length; i++) {
|
|
const key = keys1[i];
|
|
if (!keys2.includes(key)) return false;
|
|
if (obj1[key] !== obj2[key]) return false;
|
|
}
|
|
return true;
|
|
};
|
|
var isBoolean = (value) => value === true || value === false;
|
|
var joinObjects = (obj1, obj2) => {
|
|
for (const key in obj2) {
|
|
if (Object.prototype.hasOwnProperty.call(obj2, key)) {
|
|
const val2 = obj2[key];
|
|
if (key in obj1) {
|
|
obj1[key] = cx(obj1[key], val2);
|
|
} else {
|
|
obj1[key] = val2;
|
|
}
|
|
}
|
|
}
|
|
return obj1;
|
|
};
|
|
var flat = (arr, target) => {
|
|
for (let i = 0; i < arr.length; i++) {
|
|
const el = arr[i];
|
|
if (Array.isArray(el)) flat(el, target);
|
|
else if (el) target.push(el);
|
|
}
|
|
};
|
|
function flatArray(arr) {
|
|
const flattened = [];
|
|
flat(arr, flattened);
|
|
return flattened;
|
|
}
|
|
var flatMergeArrays = (...arrays) => {
|
|
const result = [];
|
|
flat(arrays, result);
|
|
const filtered = [];
|
|
for (let i = 0; i < result.length; i++) {
|
|
if (result[i]) filtered.push(result[i]);
|
|
}
|
|
return filtered;
|
|
};
|
|
var mergeObjects = (obj1, obj2) => {
|
|
const result = {};
|
|
for (const key in obj1) {
|
|
const val1 = obj1[key];
|
|
if (key in obj2) {
|
|
const val2 = obj2[key];
|
|
if (Array.isArray(val1) || Array.isArray(val2)) {
|
|
result[key] = flatMergeArrays(val2, val1);
|
|
} else if (typeof val1 === "object" && typeof val2 === "object" && val1 && val2) {
|
|
result[key] = mergeObjects(val1, val2);
|
|
} else {
|
|
result[key] = val2 + " " + val1;
|
|
}
|
|
} else {
|
|
result[key] = val1;
|
|
}
|
|
}
|
|
for (const key in obj2) {
|
|
if (!(key in obj1)) {
|
|
result[key] = obj2[key];
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
|
|
exports.cx = cx;
|
|
exports.falsyToString = falsyToString;
|
|
exports.flat = flat;
|
|
exports.flatArray = flatArray;
|
|
exports.flatMergeArrays = flatMergeArrays;
|
|
exports.isBoolean = isBoolean;
|
|
exports.isEmptyObject = isEmptyObject;
|
|
exports.isEqual = isEqual;
|
|
exports.joinObjects = joinObjects;
|
|
exports.mergeObjects = mergeObjects;
|
|
exports.removeExtraSpaces = removeExtraSpaces;
|