toolbox-x 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes to **toolbox-x** will be documented in this file.
4
4
 
5
5
  > Auto-generated from git history using [changelog-maker](https://github.com/nodejs/changelog-maker).
6
6
 
7
+ ## [v2.4.0](https://github.com/nazmul-nhb/toolbox-x/releases/tag/v2.4.0) — 2026-06-17
8
+
9
+ [Compare changes](https://github.com/nazmul-nhb/toolbox-x/compare/v2.3.0...v2.4.0)
10
+
11
+ * \[[`4d73725523`](https://github.com/nazmul-nhb/toolbox-x/commit/4d73725523)] - ✨ feat(number): added 2 new utils with docs: `safeAdd` and `getDecimalPlaces` (Nazmul Hassan)
12
+ * \[[`afdab94c08`](https://github.com/nazmul-nhb/toolbox-x/commit/afdab94c08)] - 🔧 update(docs): added docs for new hash utils (Nazmul Hassan)
13
+ * \[[`625265f93f`](https://github.com/nazmul-nhb/toolbox-x/commit/625265f93f)] - 📚 docs: updated CHANGELOG.md for v2.3.0 (github-actions\[bot])
14
+
7
15
  ## [v2.3.0](https://github.com/nazmul-nhb/toolbox-x/releases/tag/v2.3.0) — 2026-06-16
8
16
 
9
17
  [Compare changes](https://github.com/nazmul-nhb/toolbox-x/compare/v2.2.5...v2.3.0)
package/dist/index.cjs CHANGED
@@ -577,8 +577,8 @@ function getAverage(...numbers) {
577
577
  let sum = 0;
578
578
  let count = 0;
579
579
  for (const n of numbers) {
580
- const num = Number(n);
581
- if (require_primitives.isNumber(num)) {
580
+ const num = require_utilities.normalizeNumber(n);
581
+ if (!require_primitives.isUndefined(num)) {
582
582
  sum += num;
583
583
  count++;
584
584
  }
@@ -586,6 +586,72 @@ function getAverage(...numbers) {
586
586
  return count === 0 ? NaN : Math.round(sum / count * 1e3) / 1e3;
587
587
  }
588
588
  /**
589
+ * * Returns the number of decimal places represented by a number.
590
+ *
591
+ * @param value - The number or numeric string for which to calculate the number of decimal places.
592
+ * @returns The number of decimal places.
593
+ *
594
+ * @throws - {@link TypeError} - If the input value cannot be converted to a number, e.g. `undefined`, `null`, `NaN`, `'11x'` etc..
595
+ *
596
+ * @remarks
597
+ * - If a numeric string in scientific notation (e.g., '1e-6') is provided, it will calculate the decimal places accordingly.
598
+ * - If a numeric string has trailing zeros (e.g., ''1.00'' or `'9.900'`),
599
+ * it will convert them as: `'1.00'` -> `1`, `'9.900'` -> `9.9` and return `0` and `1` respectively.
600
+ * - If a number is an integer, it will return `0`.
601
+ * - Internally uses {@link normalizeNumber} to normalize the input value.
602
+ *
603
+ * @example
604
+ * getDecimalPlaces(123.456); // 3
605
+ * getDecimalPlaces('123.45600'); // 3
606
+ * getDecimalPlaces(123); // 0
607
+ * getDecimalPlaces('1e-6'); // 6
608
+ * getDecimalPlaces('1.00'); // 0
609
+ * getDecimalPlaces('9.900'); // 1
610
+ */
611
+ function getDecimalPlaces(value) {
612
+ const number = require_utilities.normalizeNumber(value);
613
+ if (require_primitives.isUndefined(number)) throw new TypeError(`Invalid numeric representation: ${value}`);
614
+ const str = String(number);
615
+ if (str.includes("e-")) {
616
+ const [, exponent] = str.split("e-");
617
+ return Number(exponent);
618
+ }
619
+ const [, decimal = ""] = str.split(".");
620
+ return decimal.length;
621
+ }
622
+ /**
623
+ * * Adds numbers safely, avoiding floating-point arithmetic issues.
624
+ *
625
+ * @param values - A list of numbers or numeric strings to add.
626
+ * @returns The sum of the provided numbers, with floating-point inaccuracies mitigated.
627
+ *
628
+ * @remarks
629
+ * - This function addresses common floating-point addition errors (e.g., `0.1 + 0.2 !== 0.3`)
630
+ * by temporarily scaling numbers to integers, performing the addition, and then scaling back.
631
+ * - Non-numeric values are safely ignored in the runtime.
632
+ * - Rounding is used to mitigate floating-point inaccuracies.
633
+ * - Intended for use cases where floating-point inaccuracies are a concern.
634
+ * - Internally uses {@link normalizeNumber}, {@link getDecimalPlaces}, {@link roundNumber}.
635
+ * - It does not handle numbers beyond {@link Number.MAX_SAFE_INTEGER} or {@link Number.MIN_SAFE_INTEGER}.
636
+ * May output incorrect results if the numbers are too large.
637
+ * @example
638
+ * safeAdd(0.1, 0.2); // → 0.3 (correctly handles floating-point error)
639
+ * safeAdd(1, '2', 3.456); // → 6.456
640
+ * safeAdd(0.1, 0.2, 0.3, 0.4); // → 1.0 (accurate sum)
641
+ */
642
+ function safeAdd(...values) {
643
+ let scale = 1;
644
+ const nums = [];
645
+ for (const value of values) {
646
+ const num = require_utilities.normalizeNumber(value);
647
+ if (!require_primitives.isUndefined(num)) {
648
+ nums.push(num);
649
+ scale = Math.max(scale, 10 ** getDecimalPlaces(num));
650
+ }
651
+ }
652
+ return nums.reduce((total, value) => total + roundNumber(value * scale, 0), 0) / scale;
653
+ }
654
+ /**
589
655
  * * Rounds a number to a specified number of decimal places.
590
656
  *
591
657
  * @param number - The number to round.
@@ -2176,7 +2242,9 @@ exports.Currency = Currency;
2176
2242
  exports.Finder = Finder;
2177
2243
  exports.Unit = Unit;
2178
2244
  exports.UnitConverter = Unit;
2245
+ exports.add = safeAdd;
2179
2246
  exports.arabicToRoman = convertToRomanNumerals;
2247
+ exports.average = getAverage;
2180
2248
  exports.averageByField = averageByField;
2181
2249
  exports.avgByField = averageByField;
2182
2250
  exports.banglaToDigit = banglaToDigit;
@@ -2219,6 +2287,7 @@ exports.countWordsInString = countWords;
2219
2287
  exports.createOptionsArray = createOptionsArray;
2220
2288
  exports.createQueryParams = require_query.generateQueryParams;
2221
2289
  exports.debounceAction = require_utils.debounceAction;
2290
+ exports.decimalPlaces = getDecimalPlaces;
2222
2291
  exports.deepParsePrimitives = require_utils.deepParsePrimitives;
2223
2292
  exports.definePrototypeMethod = require_utils.definePrototypeMethod;
2224
2293
  exports.deleteFields = deleteFields;
@@ -2259,10 +2328,10 @@ exports.generateFibonacci = fibonacciGenerator;
2259
2328
  exports.generateQueryParams = require_query.generateQueryParams;
2260
2329
  exports.generateRandomID = require_utils.generateRandomID;
2261
2330
  exports.getAverage = getAverage;
2262
- exports.getAverageOfNumbers = getAverage;
2263
2331
  exports.getCharacterDifferences = getCharacterDifferences;
2264
2332
  exports.getClassDetails = require_utils.getClassDetails;
2265
2333
  exports.getCountryByPhone = getCountryByPhone;
2334
+ exports.getDecimalPlaces = getDecimalPlaces;
2266
2335
  exports.getDivisors = getFactors;
2267
2336
  exports.getDuplicates = getDuplicates;
2268
2337
  exports.getDuplicatesFromArray = getDuplicates;
@@ -2354,6 +2423,7 @@ exports.roundNumberToNearestInterval = require_utilities.roundToNearest;
2354
2423
  exports.roundToDecimal = roundNumber;
2355
2424
  exports.roundToNearest = require_utilities.roundToNearest;
2356
2425
  exports.roundToNearestInterval = require_utilities.roundToNearest;
2426
+ exports.safeAdd = safeAdd;
2357
2427
  exports.sanitizeData = require_query.sanitizeData;
2358
2428
  exports.shuffleArray = require_basics.shuffleArray;
2359
2429
  exports.slugifyString = require_basics.slugifyString;
package/dist/index.d.cts CHANGED
@@ -292,6 +292,51 @@ declare function reverseNumber(num: Numeric): number;
292
292
  * @returns The average of the provided numbers. Returns `NaN` if no numbers are valid.
293
293
  */
294
294
  declare function getAverage(...numbers: Numeric[]): number;
295
+ /**
296
+ * * Returns the number of decimal places represented by a number.
297
+ *
298
+ * @param value - The number or numeric string for which to calculate the number of decimal places.
299
+ * @returns The number of decimal places.
300
+ *
301
+ * @throws - {@link TypeError} - If the input value cannot be converted to a number, e.g. `undefined`, `null`, `NaN`, `'11x'` etc..
302
+ *
303
+ * @remarks
304
+ * - If a numeric string in scientific notation (e.g., '1e-6') is provided, it will calculate the decimal places accordingly.
305
+ * - If a numeric string has trailing zeros (e.g., ''1.00'' or `'9.900'`),
306
+ * it will convert them as: `'1.00'` -> `1`, `'9.900'` -> `9.9` and return `0` and `1` respectively.
307
+ * - If a number is an integer, it will return `0`.
308
+ * - Internally uses {@link normalizeNumber} to normalize the input value.
309
+ *
310
+ * @example
311
+ * getDecimalPlaces(123.456); // 3
312
+ * getDecimalPlaces('123.45600'); // 3
313
+ * getDecimalPlaces(123); // 0
314
+ * getDecimalPlaces('1e-6'); // 6
315
+ * getDecimalPlaces('1.00'); // 0
316
+ * getDecimalPlaces('9.900'); // 1
317
+ */
318
+ declare function getDecimalPlaces(value: Numeric): number;
319
+ /**
320
+ * * Adds numbers safely, avoiding floating-point arithmetic issues.
321
+ *
322
+ * @param values - A list of numbers or numeric strings to add.
323
+ * @returns The sum of the provided numbers, with floating-point inaccuracies mitigated.
324
+ *
325
+ * @remarks
326
+ * - This function addresses common floating-point addition errors (e.g., `0.1 + 0.2 !== 0.3`)
327
+ * by temporarily scaling numbers to integers, performing the addition, and then scaling back.
328
+ * - Non-numeric values are safely ignored in the runtime.
329
+ * - Rounding is used to mitigate floating-point inaccuracies.
330
+ * - Intended for use cases where floating-point inaccuracies are a concern.
331
+ * - Internally uses {@link normalizeNumber}, {@link getDecimalPlaces}, {@link roundNumber}.
332
+ * - It does not handle numbers beyond {@link Number.MAX_SAFE_INTEGER} or {@link Number.MIN_SAFE_INTEGER}.
333
+ * May output incorrect results if the numbers are too large.
334
+ * @example
335
+ * safeAdd(0.1, 0.2); // → 0.3 (correctly handles floating-point error)
336
+ * safeAdd(1, '2', 3.456); // → 6.456
337
+ * safeAdd(0.1, 0.2, 0.3, 0.4); // → 1.0 (accurate sum)
338
+ */
339
+ declare function safeAdd(...values: Numeric[]): number;
295
340
  /**
296
341
  * * Rounds a number to a specified number of decimal places.
297
342
  *
@@ -1235,4 +1280,4 @@ declare function remapFields<Source extends GenericObject, Target extends Record
1235
1280
  */
1236
1281
  declare function getCountryByPhone(phone: number | string): CountryDetails[];
1237
1282
  //#endregion
1238
- export { Currency, Finder, Unit, Unit as UnitConverter, convertToRomanNumerals as arabicToRoman, convertToRomanNumerals, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, convertToRomanNumerals as numericToRoman, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, averageByField, averageByField as avgByField, banglaToDigit, getAverage as calculateAverage, getAverage, getAverage as getAverageOfNumbers, factorial as calculateFactorial, factorial, factorial as getFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, calculatePercentage, capitalizeString, getOrdinal as cardinalToOrdinal, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, getOrdinal, getOrdinal as getOrdinalNumber, getOrdinal as numberToOrdinal, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWordsOrdinal as convertNumberToWordsOrdinal, numberToWordsOrdinal, clampNumber, cloneObject, naturalSort as compareNaturally, naturalSort as compareSorter, naturalSort, naturalSort as naturalSortForString, computeTextDiff, convertArrayToString, convertArrayToString as joinArrayElements, formatCurrency as convertNumberToCurrency, formatCurrency, numberToWords as convertNumberToWords, numberToWords, convertObjectValues, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertStringCase, convertToDecimal, convertToDecimal as convertToFixed, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, wordsToNumber as wordToNumber, wordsToNumber, countInstanceMethods, countInstanceMethods as getInstanceMethodsCount, countObjectFields, countStaticMethods, countStaticMethods as getStaticMethodsCount, countWords, countWords as countWordsInString, countWords as wordCount, createOptionsArray, generateQueryParams as createQueryParams, generateQueryParams as formatQueryParams, generateQueryParams, debounceAction, deepParsePrimitives, deepParsePrimitives as parsePrimitivesDeep, definePrototypeMethod, deleteFields, deleteFields as deleteObjectFields, deleteFields as omitFields, deleteFields as omitObjectFields, deleteFields as removeFields, deleteFields as removeObjectFields, digitToBangla, getDuplicates as extractDuplicates, getDuplicates as extractDuplicatesFromArray, getDuplicates, getDuplicates as getDuplicatesFromArray, extractEmails, extractObjectEntries as extractEntries, extractObjectEntries, extractObjectEntries as objectEntries, extractObjectKeys as extractKeys, extractObjectKeys, extractObjectKeysDeep as extractKeysDeep, extractObjectKeysDeep, findMissingElements as extractMissingElements, findMissingElements, findMissingElements as getMissingElements, extractNewFields, extractNumbersFromString as extractNumbers, extractNumbersFromString, extractNumbersFromString as parseNumbersFromText, extractURLs, extractUpdatedAndNewFields, extractUpdatedFields, getFactors as factorsOf, getFactors as getDivisors, getFactors, fibonacciGenerator, fibonacciGenerator as generateFibonacci, filterArrayOfObjects, findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, flattenArray, flattenObjectDotNotation, flattenObjectKeyValue, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, generateAnagrams, generateRandomID, getCharacterDifferences, getClassDetails, getCountryByPhone, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getInstanceGetterNames, getInstanceMethodNames, getLastArrayElement, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, getNthFibonacci, getNumbersInRange, parseQueryString as getQueryStringAsObject, parseQueryString, parseQueryString as queryStringToObject, getRandomFloat as getRandomDecimal, getRandomFloat, getRandomNumber as getRandomInt, getRandomNumber, getStaticGetterNames, getStaticMethodNames, sumNumbers as getSumOfNumbers, sumNumbers, sumNumbers as sumOfNumbers, groupAndAverageByField, groupAndAverageByField as groupAndAvgByField, groupAndSumByField, splitArrayByProperty as groupArrayByProperty, splitArrayByProperty, isDeepEqual, isInvalidOrEmptyArray, isPrime, isPrime as isPrimeNumber, parseQueryStringLiteral as literalQueryStringToObject, parseQueryStringLiteral, maskString, mergeAndFlattenObjects, mergeObjects, moveArrayElement, normalizeNumber, normalizeString, parseJSON, parseJSON as parseJsonDeep, parseJsonToObject, parseObjectValues, parseObjectValues as parseStringifiedObjectValues, pickFields, pickFields as pickObjectFields, pickObjectFieldsByCondition as pickFieldsByCondition, pickObjectFieldsByCondition, remapFields, remapFields as remapObjectFields, removeDuplicatesFromArray as removeDuplicates, removeDuplicatesFromArray, replaceAllInString, reverseNumber, reverseString, rotateArray, roundNumber, roundNumber as roundToDecimal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, sanitizeData, shuffleArray, slugifyString, sortAnArray, splitArray, stableStringify, stripJsonEdgeGarbage, sumByField, sumDigits, sumFieldDifference, sumFieldDifference as totalDeltaByField, throttleAction, trimString, truncateString };
1283
+ export { Currency, Finder, Unit, Unit as UnitConverter, safeAdd as add, safeAdd, convertToRomanNumerals as arabicToRoman, convertToRomanNumerals, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, convertToRomanNumerals as numericToRoman, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, getAverage as average, getAverage as calculateAverage, getAverage, averageByField, averageByField as avgByField, banglaToDigit, factorial as calculateFactorial, factorial, factorial as getFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, calculatePercentage, capitalizeString, getOrdinal as cardinalToOrdinal, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, getOrdinal, getOrdinal as getOrdinalNumber, getOrdinal as numberToOrdinal, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWordsOrdinal as convertNumberToWordsOrdinal, numberToWordsOrdinal, clampNumber, cloneObject, naturalSort as compareNaturally, naturalSort as compareSorter, naturalSort, naturalSort as naturalSortForString, computeTextDiff, convertArrayToString, convertArrayToString as joinArrayElements, formatCurrency as convertNumberToCurrency, formatCurrency, numberToWords as convertNumberToWords, numberToWords, convertObjectValues, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertStringCase, convertToDecimal, convertToDecimal as convertToFixed, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, wordsToNumber as wordToNumber, wordsToNumber, countInstanceMethods, countInstanceMethods as getInstanceMethodsCount, countObjectFields, countStaticMethods, countStaticMethods as getStaticMethodsCount, countWords, countWords as countWordsInString, countWords as wordCount, createOptionsArray, generateQueryParams as createQueryParams, generateQueryParams as formatQueryParams, generateQueryParams, debounceAction, getDecimalPlaces as decimalPlaces, getDecimalPlaces, deepParsePrimitives, deepParsePrimitives as parsePrimitivesDeep, definePrototypeMethod, deleteFields, deleteFields as deleteObjectFields, deleteFields as omitFields, deleteFields as omitObjectFields, deleteFields as removeFields, deleteFields as removeObjectFields, digitToBangla, getDuplicates as extractDuplicates, getDuplicates as extractDuplicatesFromArray, getDuplicates, getDuplicates as getDuplicatesFromArray, extractEmails, extractObjectEntries as extractEntries, extractObjectEntries, extractObjectEntries as objectEntries, extractObjectKeys as extractKeys, extractObjectKeys, extractObjectKeysDeep as extractKeysDeep, extractObjectKeysDeep, findMissingElements as extractMissingElements, findMissingElements, findMissingElements as getMissingElements, extractNewFields, extractNumbersFromString as extractNumbers, extractNumbersFromString, extractNumbersFromString as parseNumbersFromText, extractURLs, extractUpdatedAndNewFields, extractUpdatedFields, getFactors as factorsOf, getFactors as getDivisors, getFactors, fibonacciGenerator, fibonacciGenerator as generateFibonacci, filterArrayOfObjects, findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, flattenArray, flattenObjectDotNotation, flattenObjectKeyValue, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, generateAnagrams, generateRandomID, getCharacterDifferences, getClassDetails, getCountryByPhone, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getInstanceGetterNames, getInstanceMethodNames, getLastArrayElement, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, getNthFibonacci, getNumbersInRange, parseQueryString as getQueryStringAsObject, parseQueryString, parseQueryString as queryStringToObject, getRandomFloat as getRandomDecimal, getRandomFloat, getRandomNumber as getRandomInt, getRandomNumber, getStaticGetterNames, getStaticMethodNames, sumNumbers as getSumOfNumbers, sumNumbers, sumNumbers as sumOfNumbers, groupAndAverageByField, groupAndAverageByField as groupAndAvgByField, groupAndSumByField, splitArrayByProperty as groupArrayByProperty, splitArrayByProperty, isDeepEqual, isInvalidOrEmptyArray, isPrime, isPrime as isPrimeNumber, parseQueryStringLiteral as literalQueryStringToObject, parseQueryStringLiteral, maskString, mergeAndFlattenObjects, mergeObjects, moveArrayElement, normalizeNumber, normalizeString, parseJSON, parseJSON as parseJsonDeep, parseJsonToObject, parseObjectValues, parseObjectValues as parseStringifiedObjectValues, pickFields, pickFields as pickObjectFields, pickObjectFieldsByCondition as pickFieldsByCondition, pickObjectFieldsByCondition, remapFields, remapFields as remapObjectFields, removeDuplicatesFromArray as removeDuplicates, removeDuplicatesFromArray, replaceAllInString, reverseNumber, reverseString, rotateArray, roundNumber, roundNumber as roundToDecimal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, sanitizeData, shuffleArray, slugifyString, sortAnArray, splitArray, stableStringify, stripJsonEdgeGarbage, sumByField, sumDigits, sumFieldDifference, sumFieldDifference as totalDeltaByField, throttleAction, trimString, truncateString };
package/dist/index.d.mts CHANGED
@@ -292,6 +292,51 @@ declare function reverseNumber(num: Numeric): number;
292
292
  * @returns The average of the provided numbers. Returns `NaN` if no numbers are valid.
293
293
  */
294
294
  declare function getAverage(...numbers: Numeric[]): number;
295
+ /**
296
+ * * Returns the number of decimal places represented by a number.
297
+ *
298
+ * @param value - The number or numeric string for which to calculate the number of decimal places.
299
+ * @returns The number of decimal places.
300
+ *
301
+ * @throws - {@link TypeError} - If the input value cannot be converted to a number, e.g. `undefined`, `null`, `NaN`, `'11x'` etc..
302
+ *
303
+ * @remarks
304
+ * - If a numeric string in scientific notation (e.g., '1e-6') is provided, it will calculate the decimal places accordingly.
305
+ * - If a numeric string has trailing zeros (e.g., ''1.00'' or `'9.900'`),
306
+ * it will convert them as: `'1.00'` -> `1`, `'9.900'` -> `9.9` and return `0` and `1` respectively.
307
+ * - If a number is an integer, it will return `0`.
308
+ * - Internally uses {@link normalizeNumber} to normalize the input value.
309
+ *
310
+ * @example
311
+ * getDecimalPlaces(123.456); // 3
312
+ * getDecimalPlaces('123.45600'); // 3
313
+ * getDecimalPlaces(123); // 0
314
+ * getDecimalPlaces('1e-6'); // 6
315
+ * getDecimalPlaces('1.00'); // 0
316
+ * getDecimalPlaces('9.900'); // 1
317
+ */
318
+ declare function getDecimalPlaces(value: Numeric): number;
319
+ /**
320
+ * * Adds numbers safely, avoiding floating-point arithmetic issues.
321
+ *
322
+ * @param values - A list of numbers or numeric strings to add.
323
+ * @returns The sum of the provided numbers, with floating-point inaccuracies mitigated.
324
+ *
325
+ * @remarks
326
+ * - This function addresses common floating-point addition errors (e.g., `0.1 + 0.2 !== 0.3`)
327
+ * by temporarily scaling numbers to integers, performing the addition, and then scaling back.
328
+ * - Non-numeric values are safely ignored in the runtime.
329
+ * - Rounding is used to mitigate floating-point inaccuracies.
330
+ * - Intended for use cases where floating-point inaccuracies are a concern.
331
+ * - Internally uses {@link normalizeNumber}, {@link getDecimalPlaces}, {@link roundNumber}.
332
+ * - It does not handle numbers beyond {@link Number.MAX_SAFE_INTEGER} or {@link Number.MIN_SAFE_INTEGER}.
333
+ * May output incorrect results if the numbers are too large.
334
+ * @example
335
+ * safeAdd(0.1, 0.2); // → 0.3 (correctly handles floating-point error)
336
+ * safeAdd(1, '2', 3.456); // → 6.456
337
+ * safeAdd(0.1, 0.2, 0.3, 0.4); // → 1.0 (accurate sum)
338
+ */
339
+ declare function safeAdd(...values: Numeric[]): number;
295
340
  /**
296
341
  * * Rounds a number to a specified number of decimal places.
297
342
  *
@@ -1235,4 +1280,4 @@ declare function remapFields<Source extends GenericObject, Target extends Record
1235
1280
  */
1236
1281
  declare function getCountryByPhone(phone: number | string): CountryDetails[];
1237
1282
  //#endregion
1238
- export { Currency, Finder, Unit, Unit as UnitConverter, convertToRomanNumerals as arabicToRoman, convertToRomanNumerals, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, convertToRomanNumerals as numericToRoman, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, averageByField, averageByField as avgByField, banglaToDigit, getAverage as calculateAverage, getAverage, getAverage as getAverageOfNumbers, factorial as calculateFactorial, factorial, factorial as getFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, calculatePercentage, capitalizeString, getOrdinal as cardinalToOrdinal, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, getOrdinal, getOrdinal as getOrdinalNumber, getOrdinal as numberToOrdinal, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWordsOrdinal as convertNumberToWordsOrdinal, numberToWordsOrdinal, clampNumber, cloneObject, naturalSort as compareNaturally, naturalSort as compareSorter, naturalSort, naturalSort as naturalSortForString, computeTextDiff, convertArrayToString, convertArrayToString as joinArrayElements, formatCurrency as convertNumberToCurrency, formatCurrency, numberToWords as convertNumberToWords, numberToWords, convertObjectValues, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertStringCase, convertToDecimal, convertToDecimal as convertToFixed, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, wordsToNumber as wordToNumber, wordsToNumber, countInstanceMethods, countInstanceMethods as getInstanceMethodsCount, countObjectFields, countStaticMethods, countStaticMethods as getStaticMethodsCount, countWords, countWords as countWordsInString, countWords as wordCount, createOptionsArray, generateQueryParams as createQueryParams, generateQueryParams as formatQueryParams, generateQueryParams, debounceAction, deepParsePrimitives, deepParsePrimitives as parsePrimitivesDeep, definePrototypeMethod, deleteFields, deleteFields as deleteObjectFields, deleteFields as omitFields, deleteFields as omitObjectFields, deleteFields as removeFields, deleteFields as removeObjectFields, digitToBangla, getDuplicates as extractDuplicates, getDuplicates as extractDuplicatesFromArray, getDuplicates, getDuplicates as getDuplicatesFromArray, extractEmails, extractObjectEntries as extractEntries, extractObjectEntries, extractObjectEntries as objectEntries, extractObjectKeys as extractKeys, extractObjectKeys, extractObjectKeysDeep as extractKeysDeep, extractObjectKeysDeep, findMissingElements as extractMissingElements, findMissingElements, findMissingElements as getMissingElements, extractNewFields, extractNumbersFromString as extractNumbers, extractNumbersFromString, extractNumbersFromString as parseNumbersFromText, extractURLs, extractUpdatedAndNewFields, extractUpdatedFields, getFactors as factorsOf, getFactors as getDivisors, getFactors, fibonacciGenerator, fibonacciGenerator as generateFibonacci, filterArrayOfObjects, findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, flattenArray, flattenObjectDotNotation, flattenObjectKeyValue, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, generateAnagrams, generateRandomID, getCharacterDifferences, getClassDetails, getCountryByPhone, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getInstanceGetterNames, getInstanceMethodNames, getLastArrayElement, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, getNthFibonacci, getNumbersInRange, parseQueryString as getQueryStringAsObject, parseQueryString, parseQueryString as queryStringToObject, getRandomFloat as getRandomDecimal, getRandomFloat, getRandomNumber as getRandomInt, getRandomNumber, getStaticGetterNames, getStaticMethodNames, sumNumbers as getSumOfNumbers, sumNumbers, sumNumbers as sumOfNumbers, groupAndAverageByField, groupAndAverageByField as groupAndAvgByField, groupAndSumByField, splitArrayByProperty as groupArrayByProperty, splitArrayByProperty, isDeepEqual, isInvalidOrEmptyArray, isPrime, isPrime as isPrimeNumber, parseQueryStringLiteral as literalQueryStringToObject, parseQueryStringLiteral, maskString, mergeAndFlattenObjects, mergeObjects, moveArrayElement, normalizeNumber, normalizeString, parseJSON, parseJSON as parseJsonDeep, parseJsonToObject, parseObjectValues, parseObjectValues as parseStringifiedObjectValues, pickFields, pickFields as pickObjectFields, pickObjectFieldsByCondition as pickFieldsByCondition, pickObjectFieldsByCondition, remapFields, remapFields as remapObjectFields, removeDuplicatesFromArray as removeDuplicates, removeDuplicatesFromArray, replaceAllInString, reverseNumber, reverseString, rotateArray, roundNumber, roundNumber as roundToDecimal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, sanitizeData, shuffleArray, slugifyString, sortAnArray, splitArray, stableStringify, stripJsonEdgeGarbage, sumByField, sumDigits, sumFieldDifference, sumFieldDifference as totalDeltaByField, throttleAction, trimString, truncateString };
1283
+ export { Currency, Finder, Unit, Unit as UnitConverter, safeAdd as add, safeAdd, convertToRomanNumerals as arabicToRoman, convertToRomanNumerals, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, convertToRomanNumerals as numericToRoman, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, getAverage as average, getAverage as calculateAverage, getAverage, averageByField, averageByField as avgByField, banglaToDigit, factorial as calculateFactorial, factorial, factorial as getFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, calculatePercentage, capitalizeString, getOrdinal as cardinalToOrdinal, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, getOrdinal, getOrdinal as getOrdinalNumber, getOrdinal as numberToOrdinal, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWordsOrdinal as convertNumberToWordsOrdinal, numberToWordsOrdinal, clampNumber, cloneObject, naturalSort as compareNaturally, naturalSort as compareSorter, naturalSort, naturalSort as naturalSortForString, computeTextDiff, convertArrayToString, convertArrayToString as joinArrayElements, formatCurrency as convertNumberToCurrency, formatCurrency, numberToWords as convertNumberToWords, numberToWords, convertObjectValues, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertStringCase, convertToDecimal, convertToDecimal as convertToFixed, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, wordsToNumber as wordToNumber, wordsToNumber, countInstanceMethods, countInstanceMethods as getInstanceMethodsCount, countObjectFields, countStaticMethods, countStaticMethods as getStaticMethodsCount, countWords, countWords as countWordsInString, countWords as wordCount, createOptionsArray, generateQueryParams as createQueryParams, generateQueryParams as formatQueryParams, generateQueryParams, debounceAction, getDecimalPlaces as decimalPlaces, getDecimalPlaces, deepParsePrimitives, deepParsePrimitives as parsePrimitivesDeep, definePrototypeMethod, deleteFields, deleteFields as deleteObjectFields, deleteFields as omitFields, deleteFields as omitObjectFields, deleteFields as removeFields, deleteFields as removeObjectFields, digitToBangla, getDuplicates as extractDuplicates, getDuplicates as extractDuplicatesFromArray, getDuplicates, getDuplicates as getDuplicatesFromArray, extractEmails, extractObjectEntries as extractEntries, extractObjectEntries, extractObjectEntries as objectEntries, extractObjectKeys as extractKeys, extractObjectKeys, extractObjectKeysDeep as extractKeysDeep, extractObjectKeysDeep, findMissingElements as extractMissingElements, findMissingElements, findMissingElements as getMissingElements, extractNewFields, extractNumbersFromString as extractNumbers, extractNumbersFromString, extractNumbersFromString as parseNumbersFromText, extractURLs, extractUpdatedAndNewFields, extractUpdatedFields, getFactors as factorsOf, getFactors as getDivisors, getFactors, fibonacciGenerator, fibonacciGenerator as generateFibonacci, filterArrayOfObjects, findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, flattenArray, flattenObjectDotNotation, flattenObjectKeyValue, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, generateAnagrams, generateRandomID, getCharacterDifferences, getClassDetails, getCountryByPhone, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getInstanceGetterNames, getInstanceMethodNames, getLastArrayElement, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, getNthFibonacci, getNumbersInRange, parseQueryString as getQueryStringAsObject, parseQueryString, parseQueryString as queryStringToObject, getRandomFloat as getRandomDecimal, getRandomFloat, getRandomNumber as getRandomInt, getRandomNumber, getStaticGetterNames, getStaticMethodNames, sumNumbers as getSumOfNumbers, sumNumbers, sumNumbers as sumOfNumbers, groupAndAverageByField, groupAndAverageByField as groupAndAvgByField, groupAndSumByField, splitArrayByProperty as groupArrayByProperty, splitArrayByProperty, isDeepEqual, isInvalidOrEmptyArray, isPrime, isPrime as isPrimeNumber, parseQueryStringLiteral as literalQueryStringToObject, parseQueryStringLiteral, maskString, mergeAndFlattenObjects, mergeObjects, moveArrayElement, normalizeNumber, normalizeString, parseJSON, parseJSON as parseJsonDeep, parseJsonToObject, parseObjectValues, parseObjectValues as parseStringifiedObjectValues, pickFields, pickFields as pickObjectFields, pickObjectFieldsByCondition as pickFieldsByCondition, pickObjectFieldsByCondition, remapFields, remapFields as remapObjectFields, removeDuplicatesFromArray as removeDuplicates, removeDuplicatesFromArray, replaceAllInString, reverseNumber, reverseString, rotateArray, roundNumber, roundNumber as roundToDecimal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, sanitizeData, shuffleArray, slugifyString, sortAnArray, splitArray, stableStringify, stripJsonEdgeGarbage, sumByField, sumDigits, sumFieldDifference, sumFieldDifference as totalDeltaByField, throttleAction, trimString, truncateString };
package/dist/index.mjs CHANGED
@@ -576,8 +576,8 @@ function getAverage(...numbers) {
576
576
  let sum = 0;
577
577
  let count = 0;
578
578
  for (const n of numbers) {
579
- const num = Number(n);
580
- if (isNumber(num)) {
579
+ const num = normalizeNumber(n);
580
+ if (!isUndefined(num)) {
581
581
  sum += num;
582
582
  count++;
583
583
  }
@@ -585,6 +585,72 @@ function getAverage(...numbers) {
585
585
  return count === 0 ? NaN : Math.round(sum / count * 1e3) / 1e3;
586
586
  }
587
587
  /**
588
+ * * Returns the number of decimal places represented by a number.
589
+ *
590
+ * @param value - The number or numeric string for which to calculate the number of decimal places.
591
+ * @returns The number of decimal places.
592
+ *
593
+ * @throws - {@link TypeError} - If the input value cannot be converted to a number, e.g. `undefined`, `null`, `NaN`, `'11x'` etc..
594
+ *
595
+ * @remarks
596
+ * - If a numeric string in scientific notation (e.g., '1e-6') is provided, it will calculate the decimal places accordingly.
597
+ * - If a numeric string has trailing zeros (e.g., ''1.00'' or `'9.900'`),
598
+ * it will convert them as: `'1.00'` -> `1`, `'9.900'` -> `9.9` and return `0` and `1` respectively.
599
+ * - If a number is an integer, it will return `0`.
600
+ * - Internally uses {@link normalizeNumber} to normalize the input value.
601
+ *
602
+ * @example
603
+ * getDecimalPlaces(123.456); // 3
604
+ * getDecimalPlaces('123.45600'); // 3
605
+ * getDecimalPlaces(123); // 0
606
+ * getDecimalPlaces('1e-6'); // 6
607
+ * getDecimalPlaces('1.00'); // 0
608
+ * getDecimalPlaces('9.900'); // 1
609
+ */
610
+ function getDecimalPlaces(value) {
611
+ const number = normalizeNumber(value);
612
+ if (isUndefined(number)) throw new TypeError(`Invalid numeric representation: ${value}`);
613
+ const str = String(number);
614
+ if (str.includes("e-")) {
615
+ const [, exponent] = str.split("e-");
616
+ return Number(exponent);
617
+ }
618
+ const [, decimal = ""] = str.split(".");
619
+ return decimal.length;
620
+ }
621
+ /**
622
+ * * Adds numbers safely, avoiding floating-point arithmetic issues.
623
+ *
624
+ * @param values - A list of numbers or numeric strings to add.
625
+ * @returns The sum of the provided numbers, with floating-point inaccuracies mitigated.
626
+ *
627
+ * @remarks
628
+ * - This function addresses common floating-point addition errors (e.g., `0.1 + 0.2 !== 0.3`)
629
+ * by temporarily scaling numbers to integers, performing the addition, and then scaling back.
630
+ * - Non-numeric values are safely ignored in the runtime.
631
+ * - Rounding is used to mitigate floating-point inaccuracies.
632
+ * - Intended for use cases where floating-point inaccuracies are a concern.
633
+ * - Internally uses {@link normalizeNumber}, {@link getDecimalPlaces}, {@link roundNumber}.
634
+ * - It does not handle numbers beyond {@link Number.MAX_SAFE_INTEGER} or {@link Number.MIN_SAFE_INTEGER}.
635
+ * May output incorrect results if the numbers are too large.
636
+ * @example
637
+ * safeAdd(0.1, 0.2); // → 0.3 (correctly handles floating-point error)
638
+ * safeAdd(1, '2', 3.456); // → 6.456
639
+ * safeAdd(0.1, 0.2, 0.3, 0.4); // → 1.0 (accurate sum)
640
+ */
641
+ function safeAdd(...values) {
642
+ let scale = 1;
643
+ const nums = [];
644
+ for (const value of values) {
645
+ const num = normalizeNumber(value);
646
+ if (!isUndefined(num)) {
647
+ nums.push(num);
648
+ scale = Math.max(scale, 10 ** getDecimalPlaces(num));
649
+ }
650
+ }
651
+ return nums.reduce((total, value) => total + roundNumber(value * scale, 0), 0) / scale;
652
+ }
653
+ /**
588
654
  * * Rounds a number to a specified number of decimal places.
589
655
  *
590
656
  * @param number - The number to round.
@@ -2171,4 +2237,4 @@ function getCountryByPhone(phone) {
2171
2237
  }
2172
2238
 
2173
2239
  //#endregion
2174
- export { Currency, Finder, Unit, Unit as UnitConverter, convertToRomanNumerals as arabicToRoman, convertToRomanNumerals, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, convertToRomanNumerals as numericToRoman, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, averageByField, averageByField as avgByField, banglaToDigit, getAverage as calculateAverage, getAverage, getAverage as getAverageOfNumbers, factorial as calculateFactorial, factorial, factorial as getFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, calculatePercentage, capitalizeString, getOrdinal as cardinalToOrdinal, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, getOrdinal, getOrdinal as getOrdinalNumber, getOrdinal as numberToOrdinal, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWordsOrdinal as convertNumberToWordsOrdinal, numberToWordsOrdinal, clampNumber, cloneObject, naturalSort as compareNaturally, naturalSort as compareSorter, naturalSort, naturalSort as naturalSortForString, computeTextDiff, convertArrayToString, convertArrayToString as joinArrayElements, formatCurrency as convertNumberToCurrency, formatCurrency, numberToWords as convertNumberToWords, numberToWords, convertObjectValues, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertStringCase, convertToDecimal, convertToDecimal as convertToFixed, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, wordsToNumber as wordToNumber, wordsToNumber, countInstanceMethods, countInstanceMethods as getInstanceMethodsCount, countObjectFields, countStaticMethods, countStaticMethods as getStaticMethodsCount, countWords, countWords as countWordsInString, countWords as wordCount, createOptionsArray, generateQueryParams as createQueryParams, generateQueryParams as formatQueryParams, generateQueryParams, debounceAction, deepParsePrimitives, deepParsePrimitives as parsePrimitivesDeep, definePrototypeMethod, deleteFields, deleteFields as deleteObjectFields, deleteFields as omitFields, deleteFields as omitObjectFields, deleteFields as removeFields, deleteFields as removeObjectFields, digitToBangla, getDuplicates as extractDuplicates, getDuplicates as extractDuplicatesFromArray, getDuplicates, getDuplicates as getDuplicatesFromArray, extractEmails, extractObjectEntries as extractEntries, extractObjectEntries, extractObjectEntries as objectEntries, extractObjectKeys as extractKeys, extractObjectKeys, extractObjectKeysDeep as extractKeysDeep, extractObjectKeysDeep, findMissingElements as extractMissingElements, findMissingElements, findMissingElements as getMissingElements, extractNewFields, extractNumbersFromString as extractNumbers, extractNumbersFromString, extractNumbersFromString as parseNumbersFromText, extractURLs, extractUpdatedAndNewFields, extractUpdatedFields, getFactors as factorsOf, getFactors as getDivisors, getFactors, fibonacciGenerator, fibonacciGenerator as generateFibonacci, filterArrayOfObjects, findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, flattenArray, flattenObjectDotNotation, flattenObjectKeyValue, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, generateAnagrams, generateRandomID, getCharacterDifferences, getClassDetails, getCountryByPhone, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getInstanceGetterNames, getInstanceMethodNames, getLastArrayElement, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, getNthFibonacci, getNumbersInRange, parseQueryString as getQueryStringAsObject, parseQueryString, parseQueryString as queryStringToObject, getRandomFloat as getRandomDecimal, getRandomFloat, getRandomNumber as getRandomInt, getRandomNumber, getStaticGetterNames, getStaticMethodNames, sumNumbers as getSumOfNumbers, sumNumbers, sumNumbers as sumOfNumbers, groupAndAverageByField, groupAndAverageByField as groupAndAvgByField, groupAndSumByField, splitArrayByProperty as groupArrayByProperty, splitArrayByProperty, isDeepEqual, isInvalidOrEmptyArray, isPrime, isPrime as isPrimeNumber, parseQueryStringLiteral as literalQueryStringToObject, parseQueryStringLiteral, maskString, mergeAndFlattenObjects, mergeObjects, moveArrayElement, normalizeNumber, normalizeString, parseJSON, parseJSON as parseJsonDeep, parseJsonToObject, parseObjectValues, parseObjectValues as parseStringifiedObjectValues, pickFields, pickFields as pickObjectFields, pickObjectFieldsByCondition as pickFieldsByCondition, pickObjectFieldsByCondition, remapFields, remapFields as remapObjectFields, removeDuplicatesFromArray as removeDuplicates, removeDuplicatesFromArray, replaceAllInString, reverseNumber, reverseString, rotateArray, roundNumber, roundNumber as roundToDecimal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, sanitizeData, shuffleArray, slugifyString, sortAnArray, splitArray, stableStringify, stripJsonEdgeGarbage, sumByField, sumDigits, sumFieldDifference, sumFieldDifference as totalDeltaByField, throttleAction, trimString, truncateString };
2240
+ export { Currency, Finder, Unit, Unit as UnitConverter, safeAdd as add, safeAdd, convertToRomanNumerals as arabicToRoman, convertToRomanNumerals, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, convertToRomanNumerals as numericToRoman, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, getAverage as average, getAverage as calculateAverage, getAverage, averageByField, averageByField as avgByField, banglaToDigit, factorial as calculateFactorial, factorial, factorial as getFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, calculatePercentage, capitalizeString, getOrdinal as cardinalToOrdinal, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, getOrdinal, getOrdinal as getOrdinalNumber, getOrdinal as numberToOrdinal, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWordsOrdinal as convertNumberToWordsOrdinal, numberToWordsOrdinal, clampNumber, cloneObject, naturalSort as compareNaturally, naturalSort as compareSorter, naturalSort, naturalSort as naturalSortForString, computeTextDiff, convertArrayToString, convertArrayToString as joinArrayElements, formatCurrency as convertNumberToCurrency, formatCurrency, numberToWords as convertNumberToWords, numberToWords, convertObjectValues, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertStringCase, convertToDecimal, convertToDecimal as convertToFixed, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, wordsToNumber as wordToNumber, wordsToNumber, countInstanceMethods, countInstanceMethods as getInstanceMethodsCount, countObjectFields, countStaticMethods, countStaticMethods as getStaticMethodsCount, countWords, countWords as countWordsInString, countWords as wordCount, createOptionsArray, generateQueryParams as createQueryParams, generateQueryParams as formatQueryParams, generateQueryParams, debounceAction, getDecimalPlaces as decimalPlaces, getDecimalPlaces, deepParsePrimitives, deepParsePrimitives as parsePrimitivesDeep, definePrototypeMethod, deleteFields, deleteFields as deleteObjectFields, deleteFields as omitFields, deleteFields as omitObjectFields, deleteFields as removeFields, deleteFields as removeObjectFields, digitToBangla, getDuplicates as extractDuplicates, getDuplicates as extractDuplicatesFromArray, getDuplicates, getDuplicates as getDuplicatesFromArray, extractEmails, extractObjectEntries as extractEntries, extractObjectEntries, extractObjectEntries as objectEntries, extractObjectKeys as extractKeys, extractObjectKeys, extractObjectKeysDeep as extractKeysDeep, extractObjectKeysDeep, findMissingElements as extractMissingElements, findMissingElements, findMissingElements as getMissingElements, extractNewFields, extractNumbersFromString as extractNumbers, extractNumbersFromString, extractNumbersFromString as parseNumbersFromText, extractURLs, extractUpdatedAndNewFields, extractUpdatedFields, getFactors as factorsOf, getFactors as getDivisors, getFactors, fibonacciGenerator, fibonacciGenerator as generateFibonacci, filterArrayOfObjects, findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, flattenArray, flattenObjectDotNotation, flattenObjectKeyValue, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, generateAnagrams, generateRandomID, getCharacterDifferences, getClassDetails, getCountryByPhone, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getInstanceGetterNames, getInstanceMethodNames, getLastArrayElement, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, getNthFibonacci, getNumbersInRange, parseQueryString as getQueryStringAsObject, parseQueryString, parseQueryString as queryStringToObject, getRandomFloat as getRandomDecimal, getRandomFloat, getRandomNumber as getRandomInt, getRandomNumber, getStaticGetterNames, getStaticMethodNames, sumNumbers as getSumOfNumbers, sumNumbers, sumNumbers as sumOfNumbers, groupAndAverageByField, groupAndAverageByField as groupAndAvgByField, groupAndSumByField, splitArrayByProperty as groupArrayByProperty, splitArrayByProperty, isDeepEqual, isInvalidOrEmptyArray, isPrime, isPrime as isPrimeNumber, parseQueryStringLiteral as literalQueryStringToObject, parseQueryStringLiteral, maskString, mergeAndFlattenObjects, mergeObjects, moveArrayElement, normalizeNumber, normalizeString, parseJSON, parseJSON as parseJsonDeep, parseJsonToObject, parseObjectValues, parseObjectValues as parseStringifiedObjectValues, pickFields, pickFields as pickObjectFields, pickObjectFieldsByCondition as pickFieldsByCondition, pickObjectFieldsByCondition, remapFields, remapFields as remapObjectFields, removeDuplicatesFromArray as removeDuplicates, removeDuplicatesFromArray, replaceAllInString, reverseNumber, reverseString, rotateArray, roundNumber, roundNumber as roundToDecimal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, sanitizeData, shuffleArray, slugifyString, sortAnArray, splitArray, stableStringify, stripJsonEdgeGarbage, sumByField, sumDigits, sumFieldDifference, sumFieldDifference as totalDeltaByField, throttleAction, trimString, truncateString };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toolbox-x",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.",
5
5
  "main": "./dist/index.cjs",
6
6
  "type": "module",