@fileverse-dev/formulajs 4.4.20 → 4.4.21-price-and-wallet-1

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/lib/esm/index.mjs CHANGED
@@ -1439,6 +1439,370 @@ function VLOOKUP(lookup_value, table_array, col_index_num, range_lookup) {
1439
1439
  return result
1440
1440
  }
1441
1441
 
1442
+ function XLOOKUP(search_key, lookup_range, result_range, isColV, missing_value,match_mode, search_mode) {
1443
+ let isCol = isColV === "true" ? true : false;
1444
+
1445
+ // Validate required parameters
1446
+ if (search_key === undefined || search_key === null) {
1447
+ return new Error('search_key')
1448
+ }
1449
+
1450
+ if (!lookup_range) {
1451
+ return new Error('lookup_range')
1452
+ }
1453
+ if (!result_range) {
1454
+ return new Error('result_range')
1455
+ }
1456
+
1457
+ // Validate and normalize lookup_range (must be singular row or column)
1458
+ let lookup_array = normalizeLookupRange(lookup_range);
1459
+ if (!lookup_array) {
1460
+ return new Error('lookup_range_single')
1461
+ }
1462
+
1463
+ // Validate and normalize result_range
1464
+ let result_array = normalizeResultRange(result_range);
1465
+ if (!result_array) {
1466
+ return new Error('result_range_invalid')
1467
+ }
1468
+
1469
+ // Validate that lookup and result ranges have compatible dimensions
1470
+ // Exception: if result_range is a single row, it can be returned regardless of lookup_range length
1471
+ result_array.map((row) => {
1472
+ if (row.length !== lookup_array.length) {
1473
+ return new Error('lookup_range_and_result_range')
1474
+ }
1475
+ });
1476
+
1477
+ // Set default parameter values Error: Didn't find value in XLOOKUP evaluation
1478
+ missing_value = missing_value !== undefined ? missing_value : new Error("not_found");
1479
+ match_mode = match_mode !== undefined ? match_mode : 0;
1480
+ search_mode = search_mode !== undefined ? search_mode : 1;
1481
+ isCol = isCol !== undefined ? isCol : false;
1482
+
1483
+ // Validate match_mode
1484
+ if (![0, 1, -1, 2].includes(match_mode)) {
1485
+ return new Error('match_mode_must')
1486
+ }
1487
+
1488
+ // Validate search_mode
1489
+ if (![1, -1, 2, -2].includes(search_mode)) {
1490
+ return new Error('search_mode_must')
1491
+ }
1492
+
1493
+ // Validate binary search requirements
1494
+ if (Math.abs(search_mode) === 2 && match_mode === 2) {
1495
+ return new Error('binary_search_and_wildcard')
1496
+ }
1497
+
1498
+ let res = performLookup(search_key, lookup_array, result_array, missing_value, match_mode, search_mode, isCol);
1499
+ res = isCol ? Array.isArray(res)?res.map((item) => [item.toString()]):res : [res];
1500
+ return res
1501
+ }
1502
+
1503
+ function normalizeLookupRange(lookup_range) {
1504
+ if (!Array.isArray(lookup_range)) {
1505
+ return null
1506
+ }
1507
+
1508
+ // If it's a 1D array, it's already a column
1509
+ if (!Array.isArray(lookup_range[0])) {
1510
+ return lookup_range
1511
+ }
1512
+
1513
+ // If it's a 2D array, check if it's a single row or single column
1514
+ const rows = lookup_range.length;
1515
+ const cols = lookup_range[0].length;
1516
+
1517
+ if (rows === 1) {
1518
+ // Single row - extract as array
1519
+ return lookup_range[0]
1520
+ } else if (cols === 1) {
1521
+ // Single column - extract first element of each row
1522
+ return lookup_range.map(row => row[0])
1523
+ } else {
1524
+ // Multiple rows and columns - not allowed
1525
+ return null
1526
+ }
1527
+ }
1528
+
1529
+ function normalizeResultRange(result_range) {
1530
+ if (!Array.isArray(result_range)) {
1531
+ return null
1532
+ }
1533
+
1534
+ // If it's a 1D array, convert to 2D single column for consistency
1535
+ if (!Array.isArray(result_range[0])) {
1536
+ return result_range.map(value => [value])
1537
+ }
1538
+
1539
+ // If it's already 2D, return as is
1540
+ return result_range
1541
+ }
1542
+
1543
+ function performLookup(search_key, lookup_array, result_array, missing_value, match_mode, search_mode, isCol) {
1544
+
1545
+ let foundIndex = -1;
1546
+
1547
+ // Handle different match modes
1548
+ switch (match_mode) {
1549
+ case 0: // Exact match
1550
+ foundIndex = findExactMatch(search_key, lookup_array, search_mode);
1551
+ break
1552
+ case 1: // Exact match or next larger
1553
+ foundIndex = findExactOrNextLarger(search_key, lookup_array, search_mode);
1554
+ break
1555
+ case -1: // Exact match or next smaller
1556
+ foundIndex = findExactOrNextSmaller(search_key, lookup_array, search_mode);
1557
+ break
1558
+ case 2: // Wildcard match
1559
+ foundIndex = findWildcardMatch(search_key, lookup_array, search_mode);
1560
+ break
1561
+ }
1562
+
1563
+ if (foundIndex === -1) {
1564
+ // Return missing_value (single value): "yoo"
1565
+ return missing_value
1566
+ }
1567
+ // Multiple result rows
1568
+ if (isCol) {
1569
+ // Return the foundIndex column from all rows: ["e", "r"]
1570
+ const columnValues = result_array.map(row => row[foundIndex]);
1571
+ return columnValues
1572
+ } else {
1573
+ // Return the entire matched row: ["e", 3, "s", "hj"]
1574
+ return result_array[foundIndex]
1575
+ }
1576
+ }
1577
+
1578
+ function findExactMatch(search_key, lookup_array, search_mode) {
1579
+ const processedSearchKey = typeof search_key === 'string' ? search_key.toLowerCase().trim() : search_key;
1580
+
1581
+ if (Math.abs(search_mode) === 2) {
1582
+ // Binary search
1583
+ return binarySearchExact(processedSearchKey, lookup_array, search_mode > 0)
1584
+ } else {
1585
+ // Linear search
1586
+ const indices = getSearchIndices(lookup_array.length, search_mode);
1587
+
1588
+ for (const i of indices) {
1589
+ const value = lookup_array[i];
1590
+ const processedValue = typeof value === 'string' ? value.toLowerCase().trim() : value;
1591
+
1592
+ if (processedValue === processedSearchKey) {
1593
+ return i
1594
+ }
1595
+ }
1596
+ }
1597
+
1598
+ return -1
1599
+ }
1600
+
1601
+ function findExactOrNextLarger(search_key, lookup_array, search_mode) {
1602
+ const isNumber = typeof search_key === 'number';
1603
+ const processedSearchKey = typeof search_key === 'string' ? search_key.toLowerCase().trim() : search_key;
1604
+
1605
+ if (Math.abs(search_mode) === 2) {
1606
+ // Binary search for exact or next larger
1607
+ return binarySearchNextLarger(processedSearchKey, lookup_array, search_mode > 0)
1608
+ }
1609
+
1610
+ const indices = getSearchIndices(lookup_array.length, search_mode);
1611
+ let bestIndex = -1;
1612
+
1613
+ for (const i of indices) {
1614
+ const value = lookup_array[i];
1615
+ const processedValue = typeof value === 'string' ? value.toLowerCase().trim() : value;
1616
+
1617
+ // Exact match
1618
+ if (processedValue === processedSearchKey) {
1619
+ return i
1620
+ }
1621
+
1622
+ // Next larger value
1623
+ if (isNumber && typeof value === 'number' && value > search_key) {
1624
+ if (bestIndex === -1 || value < lookup_array[bestIndex]) {
1625
+ bestIndex = i;
1626
+ }
1627
+ } else if (!isNumber && typeof value === 'string' && processedValue > processedSearchKey) {
1628
+ if (bestIndex === -1 || processedValue < (typeof lookup_array[bestIndex] === 'string' ? lookup_array[bestIndex].toLowerCase().trim() : lookup_array[bestIndex])) {
1629
+ bestIndex = i;
1630
+ }
1631
+ }
1632
+ }
1633
+
1634
+ return bestIndex
1635
+ }
1636
+
1637
+ function findExactOrNextSmaller(search_key, lookup_array, search_mode) {
1638
+ const isNumber = typeof search_key === 'number';
1639
+ const processedSearchKey = typeof search_key === 'string' ? search_key.toLowerCase().trim() : search_key;
1640
+
1641
+ if (Math.abs(search_mode) === 2) {
1642
+ // Binary search for exact or next smaller
1643
+ return binarySearchNextSmaller(processedSearchKey, lookup_array, search_mode > 0)
1644
+ }
1645
+
1646
+ const indices = getSearchIndices(lookup_array.length, search_mode);
1647
+ let bestIndex = -1;
1648
+
1649
+ for (const i of indices) {
1650
+ const value = lookup_array[i];
1651
+ const processedValue = typeof value === 'string' ? value.toLowerCase().trim() : value;
1652
+
1653
+ // Exact match
1654
+ if (processedValue === processedSearchKey) {
1655
+ return i
1656
+ }
1657
+
1658
+ // Next smaller value
1659
+ if (isNumber && typeof value === 'number' && value < search_key) {
1660
+ if (bestIndex === -1 || value > lookup_array[bestIndex]) {
1661
+ bestIndex = i;
1662
+ }
1663
+ } else if (!isNumber && typeof value === 'string' && processedValue < processedSearchKey) {
1664
+ if (bestIndex === -1 || processedValue > (typeof lookup_array[bestIndex] === 'string' ? lookup_array[bestIndex].toLowerCase().trim() : lookup_array[bestIndex])) {
1665
+ bestIndex = i;
1666
+ }
1667
+ }
1668
+ }
1669
+
1670
+ return bestIndex
1671
+ }
1672
+
1673
+ function findWildcardMatch(search_key, lookup_array, search_mode) {
1674
+ if (typeof search_key !== 'string') {
1675
+ return -1 // Wildcard only works with strings
1676
+ }
1677
+
1678
+ // Convert wildcard pattern to regex
1679
+ const pattern = search_key
1680
+ .toLowerCase()
1681
+ .replace(/\*/g, '.*') // * matches any sequence of characters
1682
+ .replace(/\?/g, '.') // ? matches any single character
1683
+ .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // Escape other regex chars
1684
+ .replace(/\\\.\*/g, '.*') // Restore our wildcards
1685
+ .replace(/\\\./g, '.');
1686
+
1687
+ const regex = new RegExp(`^${pattern}$`, 'i');
1688
+
1689
+ const indices = getSearchIndices(lookup_array.length, search_mode);
1690
+
1691
+ for (const i of indices) {
1692
+ const value = lookup_array[i];
1693
+ if (typeof value === 'string' && regex.test(value)) {
1694
+ return i
1695
+ }
1696
+ }
1697
+
1698
+ return -1
1699
+ }
1700
+
1701
+ function getSearchIndices(length, search_mode) {
1702
+ if (search_mode === -1) {
1703
+ // Last to first
1704
+ return Array.from({ length }, (_, i) => length - 1 - i)
1705
+ } else {
1706
+ // First to last (default)
1707
+ return Array.from({ length }, (_, i) => i)
1708
+ }
1709
+ }
1710
+
1711
+ function binarySearchExact(search_key, lookup_array, ascending) {
1712
+ let left = 0;
1713
+ let right = lookup_array.length - 1;
1714
+
1715
+ while (left <= right) {
1716
+ const mid = Math.floor((left + right) / 2);
1717
+ const midValue = lookup_array[mid];
1718
+ const processedMidValue = typeof midValue === 'string' ? midValue.toLowerCase().trim() : midValue;
1719
+
1720
+ if (processedMidValue === search_key) {
1721
+ return mid
1722
+ }
1723
+
1724
+ const comparison = ascending ?
1725
+ (processedMidValue < search_key) :
1726
+ (processedMidValue > search_key);
1727
+
1728
+ if (comparison) {
1729
+ left = mid + 1;
1730
+ } else {
1731
+ right = mid - 1;
1732
+ }
1733
+ }
1734
+
1735
+ return -1
1736
+ }
1737
+
1738
+ function binarySearchNextLarger(search_key, lookup_array, ascending) {
1739
+ let left = 0;
1740
+ let right = lookup_array.length - 1;
1741
+ let result = -1;
1742
+
1743
+ while (left <= right) {
1744
+ const mid = Math.floor((left + right) / 2);
1745
+ const midValue = lookup_array[mid];
1746
+ const processedMidValue = typeof midValue === 'string' ? midValue.toLowerCase().trim() : midValue;
1747
+
1748
+ if (processedMidValue === search_key) {
1749
+ return mid // Exact match
1750
+ }
1751
+
1752
+ if (ascending) {
1753
+ if (processedMidValue > search_key) {
1754
+ result = mid;
1755
+ right = mid - 1;
1756
+ } else {
1757
+ left = mid + 1;
1758
+ }
1759
+ } else {
1760
+ if (processedMidValue < search_key) {
1761
+ result = mid;
1762
+ left = mid + 1;
1763
+ } else {
1764
+ right = mid - 1;
1765
+ }
1766
+ }
1767
+ }
1768
+
1769
+ return result
1770
+ }
1771
+
1772
+ function binarySearchNextSmaller(search_key, lookup_array, ascending) {
1773
+ let left = 0;
1774
+ let right = lookup_array.length - 1;
1775
+ let result = -1;
1776
+
1777
+ while (left <= right) {
1778
+ const mid = Math.floor((left + right) / 2);
1779
+ const midValue = lookup_array[mid];
1780
+ const processedMidValue = typeof midValue === 'string' ? midValue.toLowerCase().trim() : midValue;
1781
+
1782
+ if (processedMidValue === search_key) {
1783
+ return mid // Exact match
1784
+ }
1785
+
1786
+ if (ascending) {
1787
+ if (processedMidValue < search_key) {
1788
+ result = mid;
1789
+ left = mid + 1;
1790
+ } else {
1791
+ right = mid - 1;
1792
+ }
1793
+ } else {
1794
+ if (processedMidValue > search_key) {
1795
+ result = mid;
1796
+ right = mid - 1;
1797
+ } else {
1798
+ left = mid + 1;
1799
+ }
1800
+ }
1801
+ }
1802
+
1803
+ return result
1804
+ }
1805
+
1442
1806
  /**
1443
1807
  * Returns the character specified by the code number.
1444
1808
  *
@@ -18825,4 +19189,4 @@ function MYANIMELIST() {
18825
19189
 
18826
19190
  const utils = { errors, symbols, date };
18827
19191
 
18828
- export { AAVE, ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ARTEMIS, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, BLOCKSCOUT, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CLEAN, CODE, COINGECKO, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEFILLAMA, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DUNE, DVAR, DVARP, EDATE, EFFECT, EOA, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, ETHERSCAN, EVEN, EXACT, EXP, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FARCASTER, FDIST, FDISTRT, FIND, FINV, FINVRT, FIREFLY, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FLVURL, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP, GNOSIS, GROWTH, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, HOUR, HYPGEOM, HYPGEOMDIST, IF, IFERROR, IFNA, IFS, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, INDEX, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISDATE, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISO, ISODD, ISOWEEKNUM, ISPMT, ISTEXT, KURT, LARGE, LCM, LEFT, LEN, LENS, LINEST, LN, LOG, LOG10, LOGEST, LOGINV, LOGNORM, LOGNORMDIST, LOGNORMINV, LOOKUP, LOWER, MATCH, MAX, MAXA, MAXIFS, MEDIAN, MEERKAT, MID, MIN, MINA, MINIFS, MINUS$1 as MINUS, MINUTE, MIRR, MMULT, MOD, MODE, MODEMULT, MODESNGL, MONTH, MROUND, MULTINOMIAL, MUNIT, MYANIMELIST, N, NA, NEGBINOM, NEGBINOMDIST, NETWORKDAYS, NETWORKDAYSINTL, NETWORKDAYS_INTL, NEYNAR, NOMINAL, NORM, NORMDIST, NORMINV, NORMSDIST, NORMSINV, NOT, NOW, NPER, NPV, NUMBERVALUE, OCT2BIN, OCT2DEC, OCT2HEX, ODD, OR, PDURATION, PEARSON, PERCENTILE, PERCENTILEEXC, PERCENTILEINC, PERCENTRANK, PERCENTRANKEXC, PERCENTRANKINC, PERMUT, PERMUTATIONA, PHI, PI, PMT, PNL, POISSON, POISSONDIST, POLYMARKET, POWER, PPMT, PRICEDISC, PRIVACYPOOL, PROB, PRODUCT, PROPER, PV, QUARTILE, QUARTILEEXC, QUARTILEINC, QUOTIENT, RADIANS, RAND, RANDBETWEEN, RANK, RANKAVG, RANKEQ, RATE, REPLACE, REPT, RIGHT, ROMAN, ROTKI, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, RRI, RSQ, SAFE, SEARCH, SEC, SECH, SECOND, SERIESSUM, SIGN, SIN, SINH, SKEW, SKEWP, SLN, SLOPE, SMALL, SMARTCONTRACT, SORT, SQRT, SQRTPI, STANDARDIZE, STDEV, STDEVA, STDEVP, STDEVPA, STDEVS, STEYX, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, SWITCH, SYD, T, TALLY, TAN, TANH, TBILLEQ, TBILLPRICE, TBILLYIELD, TDIST, TDISTRT, TEXT, TEXTJOIN, TIME, TIMEVALUE, TINV, TODAY, TRANSPOSE, TREND, TRIM, TRIMMEAN, TRUE, TRUNC, TTEST, TYPE, UNICHAR, UNICODE, UNIQUE, UNISWAP, UPPER, VALUE, VAR, VARA, VARP, VARPA, VARS, VLOOKUP, WEEKDAY, WEEKNUM, WEIBULL, WEIBULLDIST, WORKDAY, WORKDAYINTL, WORKDAY_INTL, XIRR, XNPV, XOR, YEAR, YEARFRAC, Z, ZTEST, utils };
19192
+ export { AAVE, ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ARTEMIS, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, BLOCKSCOUT, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CLEAN, CODE, COINGECKO, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEFILLAMA, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DUNE, DVAR, DVARP, EDATE, EFFECT, EOA, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, ETHERSCAN, EVEN, EXACT, EXP, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FARCASTER, FDIST, FDISTRT, FIND, FINV, FINVRT, FIREFLY, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FLVURL, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP, GNOSIS, GROWTH, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, HOUR, HYPGEOM, HYPGEOMDIST, IF, IFERROR, IFNA, IFS, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, INDEX, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISDATE, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISO, ISODD, ISOWEEKNUM, ISPMT, ISTEXT, KURT, LARGE, LCM, LEFT, LEN, LENS, LINEST, LN, LOG, LOG10, LOGEST, LOGINV, LOGNORM, LOGNORMDIST, LOGNORMINV, LOOKUP, LOWER, MATCH, MAX, MAXA, MAXIFS, MEDIAN, MEERKAT, MID, MIN, MINA, MINIFS, MINUS$1 as MINUS, MINUTE, MIRR, MMULT, MOD, MODE, MODEMULT, MODESNGL, MONTH, MROUND, MULTINOMIAL, MUNIT, MYANIMELIST, N, NA, NEGBINOM, NEGBINOMDIST, NETWORKDAYS, NETWORKDAYSINTL, NETWORKDAYS_INTL, NEYNAR, NOMINAL, NORM, NORMDIST, NORMINV, NORMSDIST, NORMSINV, NOT, NOW, NPER, NPV, NUMBERVALUE, OCT2BIN, OCT2DEC, OCT2HEX, ODD, OR, PDURATION, PEARSON, PERCENTILE, PERCENTILEEXC, PERCENTILEINC, PERCENTRANK, PERCENTRANKEXC, PERCENTRANKINC, PERMUT, PERMUTATIONA, PHI, PI, PMT, PNL, POISSON, POISSONDIST, POLYMARKET, POWER, PPMT, PRICEDISC, PRIVACYPOOL, PROB, PRODUCT, PROPER, PV, QUARTILE, QUARTILEEXC, QUARTILEINC, QUOTIENT, RADIANS, RAND, RANDBETWEEN, RANK, RANKAVG, RANKEQ, RATE, REPLACE, REPT, RIGHT, ROMAN, ROTKI, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, RRI, RSQ, SAFE, SEARCH, SEC, SECH, SECOND, SERIESSUM, SIGN, SIN, SINH, SKEW, SKEWP, SLN, SLOPE, SMALL, SMARTCONTRACT, SORT, SQRT, SQRTPI, STANDARDIZE, STDEV, STDEVA, STDEVP, STDEVPA, STDEVS, STEYX, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, SWITCH, SYD, T, TALLY, TAN, TANH, TBILLEQ, TBILLPRICE, TBILLYIELD, TDIST, TDISTRT, TEXT, TEXTJOIN, TIME, TIMEVALUE, TINV, TODAY, TRANSPOSE, TREND, TRIM, TRIMMEAN, TRUE, TRUNC, TTEST, TYPE, UNICHAR, UNICODE, UNIQUE, UNISWAP, UPPER, VALUE, VAR, VARA, VARP, VARPA, VARS, VLOOKUP, WEEKDAY, WEEKNUM, WEIBULL, WEIBULLDIST, WORKDAY, WORKDAYINTL, WORKDAY_INTL, XIRR, XLOOKUP, XNPV, XOR, YEAR, YEARFRAC, Z, ZTEST, utils };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fileverse-dev/formulajs",
3
- "version": "4.4.20",
3
+ "version": "4.4.21-price-and-wallet-1",
4
4
  "description": "JavaScript implementation of most Microsoft Excel formula functions",
5
5
  "author": "Formulajs",
6
6
  "publishConfig": {
@@ -4522,6 +4522,7 @@ export function WORKDAY_INTL(start_date: any, days: any, weekend: any, holidays:
4522
4522
  * @returns
4523
4523
  */
4524
4524
  export function XIRR(values: any, dates: any, guess: any): any;
4525
+ export function XLOOKUP(search_key: any, lookup_range: any, result_range: any, isColV: any, missing_value: any, match_mode: any, search_mode: any): any;
4525
4526
  /**
4526
4527
  * Returns the net present value for a schedule of cash flows that is not necessarily periodic.
4527
4528
  *
@@ -4522,6 +4522,7 @@ export function WORKDAY_INTL(start_date: any, days: any, weekend: any, holidays:
4522
4522
  * @returns
4523
4523
  */
4524
4524
  export function XIRR(values: any, dates: any, guess: any): any;
4525
+ export function XLOOKUP(search_key: any, lookup_range: any, result_range: any, isColV: any, missing_value: any, match_mode: any, search_mode: any): any;
4525
4526
  /**
4526
4527
  * Returns the net present value for a schedule of cash flows that is not necessarily periodic.
4527
4528
  *