@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.
398 lines (368 loc) • 15.6 kB
JavaScript
/*!
* ====================================================
* Rzl Utils-JS.
* ----------------------------------------------------
* Version: 3.11.0.
* Author: Rizalvin Dwiky.
* Repository: https://github.com/rzl-zone/utils-js.
* ====================================================
*/
;
var chunkKHO2SBNA_cjs = require('./chunk-KHO2SBNA.cjs');
var chunkSU3UELUB_cjs = require('./chunk-SU3UELUB.cjs');
var chunkMUHRPRR7_cjs = require('./chunk-MUHRPRR7.cjs');
var chunkWLOQQFDS_cjs = require('./chunk-WLOQQFDS.cjs');
var chunkWXFTVXBF_cjs = require('./chunk-WXFTVXBF.cjs');
var chunkGIKL4PUF_cjs = require('./chunk-GIKL4PUF.cjs');
var chunk7FGNVDEV_cjs = require('./chunk-7FGNVDEV.cjs');
var chunkDAPAK2W3_cjs = require('./chunk-DAPAK2W3.cjs');
var chunkSYHPSOUU_cjs = require('./chunk-SYHPSOUU.cjs');
var areArraysEqual = (array1, array2, ignoreOrder = false) => {
if (!(chunkSYHPSOUU_cjs.isArray(array1) && chunkSYHPSOUU_cjs.isArray(array2))) {
throw new TypeError(
`Parameters \`array1\` and \`array2\` property of the \`options\` (second parameter) must be of type \`array\`, but received: ['array1': \`${chunkSYHPSOUU_cjs.getPreciseType(
array1
)}\`, 'array2': \`${chunkSYHPSOUU_cjs.getPreciseType(array2)}\`].`
);
}
chunkSYHPSOUU_cjs.assertIsBoolean(ignoreOrder, {
message: ({ currentType, validType }) => `Third parameter \`ignoreOrder\` must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
if (!chunkGIKL4PUF_cjs.isEqual(array1.length, array2.length)) return false;
const deepIgnoreOrder = (arr) => {
if (!chunkSYHPSOUU_cjs.isArray(arr)) return arr;
const sorted = arr.map((item) => {
if (chunkSYHPSOUU_cjs.isArray(item)) {
return deepIgnoreOrder(item);
}
return item;
});
return sorted.sort((a, b) => {
const sa = chunkDAPAK2W3_cjs.safeStableStringify(a);
const sb = chunkDAPAK2W3_cjs.safeStableStringify(b);
return sa < sb ? -1 : sa > sb ? 1 : 0;
});
};
const normalizedArr1 = ignoreOrder ? deepIgnoreOrder(array1) : array1;
const normalizedArr2 = ignoreOrder ? deepIgnoreOrder(array2) : array2;
if (!chunkGIKL4PUF_cjs.isEqual(normalizedArr1.length, normalizedArr2.length)) return false;
return normalizedArr1.every(
(item, index) => chunkDAPAK2W3_cjs.safeStableStringify(item) === chunkDAPAK2W3_cjs.safeStableStringify(normalizedArr2[index])
);
};
var areObjectsEqual = (object1, object2) => {
return chunkGIKL4PUF_cjs.isEqual(object1, object2);
};
var areURLsEqualPath = (urlA, urlB) => {
if (!chunkKHO2SBNA_cjs.isURL(urlA) || !chunkKHO2SBNA_cjs.isURL(urlB)) {
throw new TypeError(
`Parameters \`urlA\` and \`urlB\` (first and second parameter) must be instance of URL.`
);
}
return urlA.protocol + "//" + urlA.host + urlA.pathname === urlB.protocol + "//" + urlB.host + urlB.pathname;
};
var areURLsIdentical = (urlA, urlB) => {
if (!chunkKHO2SBNA_cjs.isURL(urlA) || !chunkKHO2SBNA_cjs.isURL(urlB)) {
throw new TypeError(
`Parameters \`urlA\` and \`urlB\` (first and second parameter) must be instance of URL.`
);
}
return urlA.protocol + "//" + urlA.host + urlA.pathname + urlA.search === urlB.protocol + "//" + urlB.host + urlB.pathname + urlB.search;
};
var textContainsAll = (text, searchWords, options = {}) => {
if (!chunkSYHPSOUU_cjs.isNonEmptyString(text) || !chunkSYHPSOUU_cjs.isArray(searchWords)) {
return false;
}
chunkSYHPSOUU_cjs.assertIsPlainObject(options, {
message: ({ currentType, validType }) => `Third parameter (\`options\`) must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
const { exactMatch = false, flags = "i" } = options;
chunkSYHPSOUU_cjs.assertIsBoolean(exactMatch, {
message: ({ currentType, validType }) => `Parameter \`exactMatch\` property of the \`options\` (third parameter) must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
chunkWXFTVXBF_cjs.assertIsString(flags, {
message: ({ currentType, validType }) => `Parameter \`flags\` property of the \`options\` (third parameter) must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const validSearchWords = searchWords.filter((word) => chunkSYHPSOUU_cjs.isNonEmptyString(word)).map(escapeRegex);
if (validSearchWords.length === 0) return false;
return validSearchWords.every((word) => {
const pattern = exactMatch ? `(?<!\\S)${word}(?!\\S)` : word;
return new RegExp(pattern, flags.includes("u") ? flags : flags + "u").test(text);
});
};
var textContainsAny = (text, searchWords, options = {}) => {
if (!chunkSYHPSOUU_cjs.isNonEmptyString(text) || !chunkSYHPSOUU_cjs.isArray(searchWords)) {
return false;
}
chunkSYHPSOUU_cjs.assertIsPlainObject(options, {
message: ({ currentType, validType }) => `Third parameter (\`options\`) must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
const { exactMatch = false, flags = "i" } = options;
chunkSYHPSOUU_cjs.assertIsBoolean(exactMatch, {
message: ({ currentType, validType }) => `Parameter \`exactMatch\` property of the \`options\` (third parameter) must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
chunkWXFTVXBF_cjs.assertIsString(flags, {
message: ({ currentType, validType }) => `Parameter \`flags\` property of the \`options\` (third parameter) must be of type \`${validType}\`, but received: \`${currentType}\`.`
});
const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const validSearchWords = searchWords.filter((word) => chunkSYHPSOUU_cjs.isNonEmptyString(word)).map(escapeRegex);
if (validSearchWords.length === 0) return false;
const pattern = exactMatch ? `(?<!\\S)(${validSearchWords.join("|")})(?!\\S)` : `(${validSearchWords.join("|")})`;
return new RegExp(pattern, flags.includes("u") ? flags : flags + "u").test(text);
};
function isPropertyKey(value) {
const type = typeof value;
return type === "string" || type === "number" || type === "symbol";
}
var doesKeyExist = (object, key) => {
if (!chunkSYHPSOUU_cjs.isObjectOrArray(object)) return false;
if (!isPropertyKey(key)) {
throw new TypeError(
`Second Parameter (\`key\`) must be of type \`string\`, \`number\` or \`symbol\`, but received: \`${chunkSYHPSOUU_cjs.getPreciseType(
key
)}\`.`
);
}
if (Object.prototype.hasOwnProperty.call(object, key)) return true;
if (chunkSYHPSOUU_cjs.isArray(object)) {
return object.some((item) => doesKeyExist(item, key));
}
return Object.values(object).some(
(value) => chunkSYHPSOUU_cjs.isObjectOrArray(value) && doesKeyExist(value, key)
);
};
var arrayHasAnyMatch = (sourceArray, targetArray) => {
if (!chunkSYHPSOUU_cjs.isArray(sourceArray) || !chunkSYHPSOUU_cjs.isArray(targetArray) || chunk7FGNVDEV_cjs.isEmptyArray(sourceArray) || chunk7FGNVDEV_cjs.isEmptyArray(targetArray)) {
return false;
}
const sourceSet = new Set(sourceArray);
return targetArray.some((item) => sourceSet.has(item));
};
var isArguments = (value) => {
return Object.prototype.toString.call(value) === "[object Arguments]";
};
function isLength(value) {
return typeof value === "number" && value > -1 && Number.isInteger(value) && value <= Number.MAX_SAFE_INTEGER;
}
function isArrayLike(value) {
return !chunkSYHPSOUU_cjs.isFunction(value) && chunkSYHPSOUU_cjs.isObjectOrArray(value) && isLength(value?.length);
}
function isArrayLikeObject(value) {
return chunkSYHPSOUU_cjs.isObjectOrArray(value) && isLength(value.length);
}
var isCurrencyLike = (input) => {
if (!(chunkSYHPSOUU_cjs.isString(input) || chunkSYHPSOUU_cjs.isNumber(input))) return false;
const parsed = chunkMUHRPRR7_cjs.parseCurrencyString(input.toString());
if (parsed !== 0) return true;
return input.toString().trim() === "0";
};
var isDeepEqual = (a, b) => {
if (typeof a === "number" && typeof b === "number" && Number.isNaN(a) && Number.isNaN(b)) {
return true;
}
if (a === b) return true;
if (typeof a !== typeof b) return false;
if (chunkDAPAK2W3_cjs.isDate(a) && chunkDAPAK2W3_cjs.isDate(b)) {
return a.getTime() === b.getTime();
}
if (chunkGIKL4PUF_cjs.isRegExp(a) && chunkGIKL4PUF_cjs.isRegExp(b)) {
return a.toString() === b.toString();
}
if (chunkSYHPSOUU_cjs.isSymbol(a) && chunkSYHPSOUU_cjs.isSymbol(b)) {
return a.toString() === b.toString();
}
if (chunkSYHPSOUU_cjs.isSet(a) && chunkSYHPSOUU_cjs.isSet(b)) {
if (a.size !== b.size) return false;
const bValues = Array.from(b);
const matched = /* @__PURE__ */ new Set();
for (const aVal of a) {
let found = false;
for (let i = 0; i < bValues.length; i++) {
if (matched.has(i)) continue;
if (isDeepEqual(aVal, bValues[i])) {
matched.add(i);
found = true;
break;
}
}
if (!found) return false;
}
return true;
}
if (chunkDAPAK2W3_cjs.isMap(a) && chunkDAPAK2W3_cjs.isMap(b)) {
if (a.size !== b.size) return false;
const bEntries = Array.from(b);
const matched = /* @__PURE__ */ new Set();
for (const [aKey, aVal] of a) {
let found = false;
for (let i = 0; i < bEntries.length; i++) {
if (matched.has(i)) continue;
const [bKey, bVal] = bEntries[i];
if (isDeepEqual(aKey, bKey) && isDeepEqual(aVal, bVal)) {
matched.add(i);
found = true;
break;
}
}
if (!found) return false;
}
return true;
}
if (chunkSYHPSOUU_cjs.isArray(a) && chunkSYHPSOUU_cjs.isArray(b)) {
if (a.length !== b.length) return false;
return a.every((item, i) => isDeepEqual(item, b[i]));
}
if (chunkSYHPSOUU_cjs.isObjectOrArray(a) && chunkSYHPSOUU_cjs.isObjectOrArray(b) && a && b) {
if (chunkSYHPSOUU_cjs.isArray(a) !== chunkSYHPSOUU_cjs.isArray(b)) return false;
const aKeys = Object.keys(a);
const bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) return false;
return aKeys.every((key) => isDeepEqual(a[key], b[key]));
}
return false;
};
function isElement(value) {
return !!value && typeof value === "object" && value?.nodeType === 1 && !chunkSYHPSOUU_cjs.isPlainObject(value);
}
function isEmpty(value) {
if (chunkSYHPSOUU_cjs.isNil(value)) return true;
if (chunkSYHPSOUU_cjs.isBoolean(value) || chunkSYHPSOUU_cjs.isNumber(value, { includeNaN: true }) || chunkSYHPSOUU_cjs.isSymbol(value))
return true;
if (chunkSYHPSOUU_cjs.isFunction(value)) {
return Object.keys(value).length === 0;
}
if (chunkSYHPSOUU_cjs.isString(value) || chunkSYHPSOUU_cjs.isArray(value) || isArguments(value) || chunkSU3UELUB_cjs.isTypedArray(value)) {
return value.length === 0;
}
if (chunkDAPAK2W3_cjs.isMap(value) || chunkSYHPSOUU_cjs.isSet(value)) {
return value.size === 0;
}
if (chunkSYHPSOUU_cjs.isBuffer(value)) {
return value.length === 0;
}
if (chunkSYHPSOUU_cjs.isPlainObject(value)) {
return Object.keys(value).length === 0;
}
return false;
}
var isEmptyDeep = (value) => {
if (chunkSYHPSOUU_cjs.isString(value)) return chunkWLOQQFDS_cjs.isEmptyString(value);
if (chunkSYHPSOUU_cjs.isNumber(value)) return chunkSYHPSOUU_cjs.isNaN(value);
if (chunkSYHPSOUU_cjs.isArray(value)) {
return chunk7FGNVDEV_cjs.isEmptyArray(value) || value.every(isEmptyDeep);
}
if (chunkSYHPSOUU_cjs.isObjectOrArray(value)) {
const keys = Object.keys(value);
const symbols = Object.getOwnPropertySymbols(value);
if (keys.length === 0 && symbols.length === 0) return true;
return [...keys, ...symbols].every((key) => isEmptyDeep(value[key]));
}
if (!value) return true;
return false;
};
function isEqualWith(value, other, customizer) {
return chunkGIKL4PUF_cjs.baseDeepEqual(value, other, customizer, /* @__PURE__ */ new WeakMap());
}
function isMatchWith(value, other, customizer) {
return baseIsMatch(value, other, customizer);
}
function isSameValue(x, y) {
return x === y || x === 0 && y === 0 || Number.isNaN(x) && Number.isNaN(y);
}
function baseIsMatch(object, source, customizer) {
if (object === source) return true;
if (!chunkSYHPSOUU_cjs.isObjectOrArray(source)) {
return isSameValue(object, source);
}
if (!chunkSYHPSOUU_cjs.isObjectOrArray(object)) {
return false;
}
const keys = Reflect.ownKeys(source).filter(
(k) => !(chunkSYHPSOUU_cjs.isArray(source) && k === "length")
);
for (const key of keys) {
if (!(key in object)) return false;
const objValue = object[key];
const srcValue = source[key];
const result = customizer?.(objValue, srcValue, key, object, source);
if (!chunkSYHPSOUU_cjs.isUndefined(result)) {
if (!result) return false;
continue;
}
if (chunkSYHPSOUU_cjs.isObjectOrArray(objValue) && chunkSYHPSOUU_cjs.isObjectOrArray(srcValue)) {
if (!isMatchWith(objValue, srcValue, customizer)) return false;
} else {
if (!isSameValue(objValue, srcValue)) return false;
}
}
return true;
}
function isMatch(object, source) {
return baseIsMatch(object, source);
}
var funcToString = Function.prototype.toString;
var reIsNative = /\{\s*\[native code\]\s*\}/;
function isNative(value) {
if (!chunkSYHPSOUU_cjs.isFunction(value)) return false;
try {
const source = funcToString.call(value);
return reIsNative.test(source);
} catch {
return false;
}
}
function isObjectLoose(value) {
return !chunkSYHPSOUU_cjs.isNil(value) && (chunkSYHPSOUU_cjs.isObjectOrArray(value) || chunkSYHPSOUU_cjs.isFunction(value));
}
function isSafeInteger(value) {
return typeof value === "number" && Number.isSafeInteger(value);
}
var isValidURL = (url) => {
if (!chunkSYHPSOUU_cjs.isNonEmptyString(url)) return false;
let decodedUrl;
try {
decodedUrl = decodeURIComponent(url);
} catch {
return false;
}
if (!decodedUrl.startsWith("http://") && !decodedUrl.startsWith("https://")) {
return false;
}
const urlPattern = new RegExp(
/^https?:\/\/(?:localhost(?::\d+)?(?:[\/?#][^\s]*)?|(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}(?::\d+)?(?:[\/?#][^\s]*)?)$/
//! DEPRECATED
// /^https?:\/\/(?:localhost(?::\d+)?(?:[/?#][^\s]*)?|(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6})(?:[/?#][^\s]*)?$/
// /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/
);
return urlPattern.test(decodedUrl);
};
function isWeakMap(value) {
return chunkSYHPSOUU_cjs.isObject(value) && !chunkSYHPSOUU_cjs.isNull(value) && value instanceof WeakMap;
}
exports.areArraysEqual = areArraysEqual;
exports.areObjectsEqual = areObjectsEqual;
exports.areURLsEqualPath = areURLsEqualPath;
exports.areURLsIdentical = areURLsIdentical;
exports.arrayHasAnyMatch = arrayHasAnyMatch;
exports.doesKeyExist = doesKeyExist;
exports.isArguments = isArguments;
exports.isArrayLike = isArrayLike;
exports.isArrayLikeObject = isArrayLikeObject;
exports.isCurrencyLike = isCurrencyLike;
exports.isDeepEqual = isDeepEqual;
exports.isElement = isElement;
exports.isEmpty = isEmpty;
exports.isEmptyDeep = isEmptyDeep;
exports.isEqualWith = isEqualWith;
exports.isLength = isLength;
exports.isMatch = isMatch;
exports.isMatchWith = isMatchWith;
exports.isNative = isNative;
exports.isObjectLoose = isObjectLoose;
exports.isPropertyKey = isPropertyKey;
exports.isSafeInteger = isSafeInteger;
exports.isValidURL = isValidURL;
exports.isWeakMap = isWeakMap;
exports.textContainsAll = textContainsAll;
exports.textContainsAny = textContainsAny;