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.

398 lines (368 loc) 15.6 kB
/*! * ==================================================== * Rzl Utils-JS. * ---------------------------------------------------- * Version: 3.11.0. * Author: Rizalvin Dwiky. * Repository: https://github.com/rzl-zone/utils-js. * ==================================================== */ 'use strict'; 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;