@fileverse-dev/formulajs 4.4.18 → 4.4.20-mod-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.
@@ -1,4 +1,4 @@
1
- /* @fileverse-dev/formulajs v4.4.18 */
1
+ /* @fileverse-dev/formulajs v4.4.20-mod-1 */
2
2
  var _excluded = [ "confirmations", "dataDecoded" ];
3
3
 
4
4
  function _objectWithoutProperties(e, t) {
@@ -4854,65 +4854,65 @@ function _typeof(o) {
4854
4854
  }
4855
4855
  return jStat.rows(array);
4856
4856
  }
4857
- function SORT(array) {
4858
- var sort_index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
4859
- var is_ascending = arguments.length > 2 ? arguments[2] : undefined;
4860
- var by_col = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
4861
- if (!array || !Array.isArray(array)) return na;
4862
- if (array.length === 0) return 0;
4863
- var idx = parseNumber(sort_index);
4864
- if (!idx || idx < 1) return value;
4865
- idx = idx - 1;
4866
- var sortOrderNumber = is_ascending === "FALSE" ? -1 : 1;
4867
- var order = parseNumber(sortOrderNumber);
4868
- if (order !== 1 && order !== -1) return value;
4869
- var byCol = parseBool(by_col);
4870
- if (typeof byCol !== "boolean") return name;
4871
- var matrix = fillMatrix(array);
4872
- var working = byCol ? transpose(matrix) : matrix;
4873
- if (!working.length || !working[0] || idx >= working[0].length) {
4857
+ function SORT(inputArray) {
4858
+ var sortIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
4859
+ var isAscending = arguments.length > 2 ? arguments[2] : undefined;
4860
+ var sortByColumn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
4861
+ if (!inputArray || !Array.isArray(inputArray)) return na;
4862
+ if (inputArray.length === 0) return 0;
4863
+ var sortColumnIndex = parseNumber(sortIndex);
4864
+ if (!sortColumnIndex || sortColumnIndex < 1) return value;
4865
+ sortColumnIndex = sortColumnIndex - 1;
4866
+ var sortDirection = (isAscending === null || isAscending === void 0 ? void 0 : isAscending.toLowerCase()) === "false" ? -1 : 1;
4867
+ var parsedSortDirection = parseNumber(sortDirection);
4868
+ if (parsedSortDirection !== 1 && parsedSortDirection !== -1) return value;
4869
+ var isSortByColumn = parseBool(sortByColumn);
4870
+ if (typeof isSortByColumn !== "boolean") return name;
4871
+ var normalizedMatrix = fillMatrix(inputArray);
4872
+ var orientedMatrix = isSortByColumn ? transpose(normalizedMatrix) : normalizedMatrix;
4873
+ if (!orientedMatrix.length || !orientedMatrix[0] || sortColumnIndex >= orientedMatrix[0].length) {
4874
4874
  return value;
4875
4875
  }
4876
- var isBlank = function isBlank(v) {
4877
- return v === "" || v === null || v === undefined;
4876
+ var isBlank = function isBlank(value) {
4877
+ return value === "" || value === null || value === undefined;
4878
4878
  };
4879
- var cmp = function cmp(a, b) {
4879
+ var compareValues = function compareValues(a, b) {
4880
4880
  var _parseString, _parseString2;
4881
4881
  var aBlank = isBlank(a);
4882
4882
  var bBlank = isBlank(b);
4883
4883
  if (aBlank && bBlank) return 0;
4884
4884
  if (aBlank) return 1;
4885
4885
  if (bBlank) return -1;
4886
- var na = parseNumber(a);
4887
- var nb = parseNumber(b);
4888
- var aNum = Number.isFinite(na);
4889
- var bNum = Number.isFinite(nb);
4890
- if (aNum && bNum) {
4891
- if (na < nb) return -1;
4892
- if (na > nb) return 1;
4886
+ var parsedA = parseNumber(a);
4887
+ var parsedB = parseNumber(b);
4888
+ var isANumber = Number.isFinite(parsedA);
4889
+ var isBNumber = Number.isFinite(parsedB);
4890
+ if (isANumber && isBNumber) {
4891
+ if (parsedA < parsedB) return -1;
4892
+ if (parsedA > parsedB) return 1;
4893
4893
  return 0;
4894
4894
  }
4895
- var sa = ((_parseString = parseString(a)) !== null && _parseString !== void 0 ? _parseString : "").toString().toLowerCase();
4896
- var sb = ((_parseString2 = parseString(b)) !== null && _parseString2 !== void 0 ? _parseString2 : "").toString().toLowerCase();
4897
- if (sa < sb) return -1;
4898
- if (sa > sb) return 1;
4895
+ var stringA = ((_parseString = parseString(a)) !== null && _parseString !== void 0 ? _parseString : "").toString().toLowerCase();
4896
+ var stringB = ((_parseString2 = parseString(b)) !== null && _parseString2 !== void 0 ? _parseString2 : "").toString().toLowerCase();
4897
+ if (stringA < stringB) return -1;
4898
+ if (stringA > stringB) return 1;
4899
4899
  return 0;
4900
4900
  };
4901
- var decorated = working.map((function(row, i) {
4901
+ var rowsWithOriginalIndex = orientedMatrix.map((function(row, rowIndex) {
4902
4902
  return {
4903
4903
  row: row,
4904
- i: i
4904
+ rowIndex: rowIndex
4905
4905
  };
4906
4906
  }));
4907
- decorated.sort((function(A, B) {
4908
- var base = cmp(A.row[idx], B.row[idx]);
4909
- if (base !== 0) return base * order;
4910
- return A.i - B.i;
4907
+ rowsWithOriginalIndex.sort((function(rowA, rowB) {
4908
+ var baseComparison = compareValues(rowA.row[sortColumnIndex], rowB.row[sortColumnIndex]);
4909
+ if (baseComparison !== 0) return baseComparison * parsedSortDirection;
4910
+ return rowA.rowIndex - rowB.rowIndex;
4911
4911
  }));
4912
- var sorted = decorated.map((function(d) {
4913
- return d.row;
4912
+ var sortedMatrix = rowsWithOriginalIndex.map((function(item) {
4913
+ return item.row;
4914
4914
  }));
4915
- return byCol ? transpose(sorted) : sorted;
4915
+ return isSortByColumn ? transpose(sortedMatrix) : sortedMatrix;
4916
4916
  }
4917
4917
  function TRANSPOSE(array) {
4918
4918
  if (!array) {
@@ -4962,6 +4962,101 @@ function _typeof(o) {
4962
4962
  }
4963
4963
  return result;
4964
4964
  }
4965
+ function XLOOKUP(lookup_value, lookup_array, return_array, if_not_found, match_mode, search_mode) {
4966
+ var ERROR_NA = "#N/A";
4967
+ var ERROR_REF = "#REF!";
4968
+ console.log("XLOOKUP parameters:", {
4969
+ lookup_value: lookup_value,
4970
+ lookup_array: lookup_array,
4971
+ return_array: return_array,
4972
+ if_not_found: if_not_found,
4973
+ match_mode: match_mode,
4974
+ search_mode: search_mode
4975
+ });
4976
+ console.log("XLOOKUP called with:", {
4977
+ lookup_value: lookup_value,
4978
+ lookup_array: lookup_array,
4979
+ return_array: return_array,
4980
+ if_not_found: if_not_found,
4981
+ match_mode: match_mode,
4982
+ search_mode: search_mode
4983
+ });
4984
+ if (typeof return_array === "number" && Array.isArray(lookup_array) && Array.isArray(lookup_array[0])) {
4985
+ console.log("Detected VLOOKUP-style call");
4986
+ var table_array = lookup_array;
4987
+ var col_index_num = return_array;
4988
+ var range_lookup = !(if_not_found === "false" || if_not_found === false || if_not_found === 0);
4989
+ if (col_index_num < 1 || col_index_num > table_array[0].length) {
4990
+ return ERROR_REF;
4991
+ }
4992
+ var _lookup_col = table_array.map((function(row) {
4993
+ return row[0];
4994
+ }));
4995
+ var _return_col = table_array.map((function(row) {
4996
+ return row[col_index_num - 1];
4997
+ }));
4998
+ return performLookup(lookup_value, _lookup_col, _return_col, ERROR_NA, range_lookup ? -1 : 0);
4999
+ }
5000
+ console.log("Detected standard XLOOKUP call");
5001
+ if (!lookup_array || !return_array) {
5002
+ console.log("Missing lookup_array or return_array");
5003
+ return ERROR_NA;
5004
+ }
5005
+ var lookup_col = lookup_array;
5006
+ var return_col = return_array;
5007
+ if (Array.isArray(lookup_array) && Array.isArray(lookup_array[0])) {
5008
+ lookup_col = lookup_array.map((function(row) {
5009
+ return row[0];
5010
+ }));
5011
+ console.log("Extracted lookup column from 2D array:", lookup_col);
5012
+ }
5013
+ if (Array.isArray(return_array) && Array.isArray(return_array[0])) {
5014
+ return_col = return_array.map((function(row) {
5015
+ return row[0];
5016
+ }));
5017
+ console.log("Extracted return column from 2D array:", return_col);
5018
+ }
5019
+ if (lookup_col.length !== return_col.length) {
5020
+ console.log("Array length mismatch:", lookup_col.length, "vs", return_col.length);
5021
+ return ERROR_NA;
5022
+ }
5023
+ if_not_found = if_not_found !== undefined ? if_not_found : ERROR_NA;
5024
+ match_mode = match_mode || 0;
5025
+ search_mode = search_mode || 1;
5026
+ return performLookup(lookup_value, lookup_col, return_col, if_not_found, match_mode, search_mode);
5027
+ }
5028
+ function performLookup(lookup_value, lookup_array, return_array, if_not_found, match_mode, search_mode) {
5029
+ var isNumberLookup = typeof lookup_value === "number";
5030
+ var lookupValue = typeof lookup_value === "string" ? lookup_value.toLowerCase().trim() : lookup_value;
5031
+ var bestMatchIndex = -1;
5032
+ console.log("XLOOKUP Debug:", {
5033
+ looking_for: lookup_value,
5034
+ processed_lookup: lookupValue,
5035
+ lookup_array: lookup_array,
5036
+ return_array: return_array,
5037
+ match_mode: match_mode
5038
+ });
5039
+ var startIndex = search_mode === -1 ? lookup_array.length - 1 : 0;
5040
+ var endIndex = search_mode === -1 ? -1 : lookup_array.length;
5041
+ var step = search_mode === -1 ? -1 : 1;
5042
+ for (var i = startIndex; i !== endIndex; i += step) {
5043
+ var rawValue = lookup_array[i];
5044
+ var arrayValue = typeof rawValue === "string" ? rawValue.toLowerCase().trim() : rawValue;
5045
+ console.log('Comparing: "'.concat(lookupValue, '" === "').concat(arrayValue, '" (types: ').concat(_typeof(lookupValue), " vs ").concat(_typeof(arrayValue), ")"));
5046
+ if (arrayValue === lookupValue) {
5047
+ console.log("Found match at index ".concat(i, ": ").concat(return_array[i]));
5048
+ return return_array[i];
5049
+ }
5050
+ if (match_mode === -1) {
5051
+ if (isNumberLookup && typeof arrayValue === "number" && arrayValue <= lookup_value || !isNumberLookup && typeof arrayValue === "string" && arrayValue.localeCompare(lookupValue) <= 0) {
5052
+ bestMatchIndex = i;
5053
+ console.log("Approximate match candidate at index ".concat(i, ": ").concat(arrayValue));
5054
+ }
5055
+ }
5056
+ }
5057
+ console.log("No exact match found. Returning: ".concat(bestMatchIndex !== -1 ? return_array[bestMatchIndex] : if_not_found));
5058
+ return bestMatchIndex !== -1 ? return_array[bestMatchIndex] : if_not_found;
5059
+ }
4965
5060
  function CHAR(number) {
4966
5061
  number = parseNumber(number);
4967
5062
  if (number === 0) {
@@ -19206,6 +19301,7 @@ function _typeof(o) {
19206
19301
  exports.WORKDAYINTL = WORKDAYINTL;
19207
19302
  exports.WORKDAY_INTL = WORKDAY_INTL;
19208
19303
  exports.XIRR = XIRR;
19304
+ exports.XLOOKUP = XLOOKUP;
19209
19305
  exports.XNPV = XNPV;
19210
19306
  exports.XOR = XOR;
19211
19307
  exports.YEAR = YEAR;